搜尋此網誌

2015年10月7日 星期三

【Design Pattern】


策略模式
定義了演算法家族,個別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變動,不會影響到使用演算法的程式。
設計守則
  1. 找出程式中可能需要更動之處,把它們獨立出來,不要和那些不需要更動的程式碼混在一起。
    換句話說:
    把會變動的部份取出並封裝起來,以便以後可以輕易地擴充此部分,而不影響不需要更動的其他部分。
  2. 寫程式是針對介面而寫,而不是針對實踐方式而寫。
  3. 多用合成,少用繼承。



觀察者模式
定義了物件之間的一對多關係,如此一來,當一個物件改變狀態,其他相依者都會收到通知並自動更新。
  1. 設計時,盡量讓需要互動的元件之間關係鬆綁。



裝飾者模式
動態地將責任加諸於物件上。想要擴充功能,裝飾者提供有別於繼承的另一個選擇。
  1. 類別應該開放,以便擴充;應該關閉,禁止修改。

抽象工廠模式
提供了一個介面,建立相關或相依物件之家族,而不需明確指定具項類別。

工廠方法模式
定義一個建立物件的介面,但由次類別決定要實體化的類別為何者。工廠方法讓類別把實體化的動作,交由次類別進行。
  1. 依賴抽象類別,不要依賴具象類別。(dependency Inversion Principle)




獨體模式(Singleton Pattern)
確保一個類別只有一個實體,並給它一個存取的全域點(global point)。

命令模式
將「請求」封裝成物件,以便使用不同的請求、佇列、或者日誌,參數化其他物件。命令模式也支援可復原的作業。

轉接器模式

將一個類別的介面,轉換成另一個介面以供客戶使用。轉接器讓原本介面不相容的類別可以合作無間。

表象模式
表象模式提供了統一的介面,用來存取次系統中的一群介面。表象定義了一個較高的介面,讓次系統更容易使用。
  1. 認識極少化守則:只和你的密友談話。
樣板方法模式
將一個演算法的骨架定義再一個方法中,而演算法本身會用到的一些方法,則是定義在次類別中。樣板方法讓次類別可以在不改變演算法架構的情況下,重新定義演算法中的某些步驟。
  1. 別呼叫我們,我們會呼叫你。(低階元件絕對不可以直接呼叫高階元件)
反覆器模式(Iterator Pattern)
讓我們能夠取得一個聚集內的每一個元素,而不需要此聚集將其實踐方式暴露出來。
把重複訪問的演算法用反覆器包裝起來,使得要重複訪問這些物件的人,只要知道其反覆器就好,不用知道實際訪問的演算法。

  1. 一個類別應該只具有一個改變的理由。

JSONArray jsonArray = new JSONArray();
        for (int i = 0; i < mItems.size(); i++) {
            jsonArray.put(mItems.get(i).toJsonObject());
        }
轉換成Iterator Pattern
JSONArray jsonArray = new JSONArray();

        Iterator iterator = mItems.iterator();
        while (iterator.hasNext()) {
            AirSiteObject object = (AirSiteObject) iterator.next();
            jsonArray.put(object.toJsonObject());
        }

合成模式
允許你將物件合成樹狀結構,呈現[部分/整體]的階層關係。合成能讓客戶程式碼以一致的方式處理個別物件,以及合成物件。

把英雄分成隊伍,可以直接對英雄隊伍點名,他會列出所有隊伍裡的英雄,以及裡面子隊伍的英雄。

借的書到期了,剩下的有空再補

沒有留言: