定義了演算法家族,個別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變動,不會影響到使用演算法的程式。
設計守則
- 找出程式中可能需要更動之處,把它們獨立出來,不要和那些不需要更動的程式碼混在一起。
換句話說:
把會變動的部份取出並封裝起來,以便以後可以輕易地擴充此部分,而不影響不需要更動的其他部分。 - 寫程式是針對介面而寫,而不是針對實踐方式而寫。
- 多用合成,少用繼承。
觀察者模式
定義了物件之間的一對多關係,如此一來,當一個物件改變狀態,其他相依者都會收到通知並自動更新。
- 設計時,盡量讓需要互動的元件之間關係鬆綁。
- 類別應該開放,以便擴充;應該關閉,禁止修改。
提供了一個介面,建立相關或相依物件之家族,而不需明確指定具項類別。
工廠方法模式
定義一個建立物件的介面,但由次類別決定要實體化的類別為何者。工廠方法讓類別把實體化的動作,交由次類別進行。
- 依賴抽象類別,不要依賴具象類別。(dependency Inversion Principle)
獨體模式(Singleton Pattern)
確保一個類別只有一個實體,並給它一個存取的全域點(global point)。
命令模式
將「請求」封裝成物件,以便使用不同的請求、佇列、或者日誌,參數化其他物件。命令模式也支援可復原的作業。
轉接器模式
將一個類別的介面,轉換成另一個介面以供客戶使用。轉接器讓原本介面不相容的類別可以合作無間。
表象模式
表象模式提供了統一的介面,用來存取次系統中的一群介面。表象定義了一個較高的介面,讓次系統更容易使用。
- 認識極少化守則:只和你的密友談話。
將一個演算法的骨架定義再一個方法中,而演算法本身會用到的一些方法,則是定義在次類別中。樣板方法讓次類別可以在不改變演算法架構的情況下,重新定義演算法中的某些步驟。
轉換成Iterator Pattern- 別呼叫我們,我們會呼叫你。(低階元件絕對不可以直接呼叫高階元件)
讓我們能夠取得一個聚集內的每一個元素,而不需要此聚集將其實踐方式暴露出來。
把重複訪問的演算法用反覆器包裝起來,使得要重複訪問這些物件的人,只要知道其反覆器就好,不用知道實際訪問的演算法。
把重複訪問的演算法用反覆器包裝起來,使得要重複訪問這些物件的人,只要知道其反覆器就好,不用知道實際訪問的演算法。
- 一個類別應該只具有一個改變的理由。
JSONArray jsonArray = new JSONArray(); for (int i = 0; i < mItems.size(); i++) { jsonArray.put(mItems.get(i).toJsonObject()); }
JSONArray jsonArray = new JSONArray(); Iterator iterator = mItems.iterator(); while (iterator.hasNext()) { AirSiteObject object = (AirSiteObject) iterator.next(); jsonArray.put(object.toJsonObject()); }
合成模式
允許你將物件合成樹狀結構,呈現[部分/整體]的階層關係。合成能讓客戶程式碼以一致的方式處理個別物件,以及合成物件。
把英雄分成隊伍,可以直接對英雄隊伍點名,他會列出所有隊伍裡的英雄,以及裡面子隊伍的英雄。
借的書到期了,剩下的有空再補
把英雄分成隊伍,可以直接對英雄隊伍點名,他會列出所有隊伍裡的英雄,以及裡面子隊伍的英雄。
借的書到期了,剩下的有空再補
沒有留言:
張貼留言