這30天內我們介紹了什麼事Design Pattern、Design Pattern的原則及分類以及各種Design Pattern及應用。在這來做個總結。
Design Pattern並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種"方案"
為了建立一個方便維護及擴充的軟體系統。
一個類別專注做一件事,不應該將不相關的功能放在同一個程式碼內,使整體程式碼中的每個部分都與自己實作的功能相關。
系統需要被擴充時,應該藉由新增新的程式碼來擴充新功能,而非修改原本的程式碼來擴充新功能。
子類別可以擴充套件父類別的功能,但不改變父類別原有的功能。
類別不應該強迫依賴他們不使用的方法。
高層模組不應該依賴低層模組,兩者皆應依賴於抽象;抽象不應該依賴細節,細節應該依賴於抽象。
遇到套件重複使用的問題,應該先考慮使用組合/聚合的方式,其次才是繼承。若要使用繼承,則須符合里氏替換原則。
**迪米特法則(Law of Demeter)** 又稱最少知識原則(Least Knowledge Principle)。只與自己直接有關係的類別溝通。
Singleton = One Instance ONLY。單例模式希望執行一個且唯一一個Singleton物件且Singleton物件可以全局使用。
定義了一個建立物件的insterface,由子類別決定實體化的類別為何者。
抽象工廠主要是由繼承來的次類別來決定要產生哪種實體產品,其主要目的是將客戶從實體型態中鬆綁。
生成器模式就是將元件做分離,依照需求一一組裝起來,建立不同需求的物件。如同不同的人組一台電腦需要各種不同的零件一樣。
建立原型物件,透過複製的方式建立大量物件,而非傳統的建立方式。這為原型模式主張的目標,不但能提升效能,也隱藏了創建新物件的復雜性。
適配器模式的目的在於將一個類別的介面轉換成客戶希望的另外一個介面,Adapter使得原本由於介面相容而不能一起工作的那些類別可以一起工作。如出國玩需要插座轉接頭。
橋接模式是將抽象部分與實現部分分離,使它們都可以獨立的變化。即用合成關係代替繼承關係。如同合成/聚合複用原則。
組合模式就是將元件做分離,依照需求一一組裝起來,建立不同需求的物件。
裝飾模式動態將責任附加在物件上,若要擴展功能上,裝飾者提供比繼承更有彈性的替代方案。
為子系統中的一組接口提供一個統一的高層接口,使得子系統更容易使用。
藉由共享來實現重用大量细粒度,減少需要建立的物件數量、避免大量類似物件的創建,進而提高資源使用率。
爲其他物件提供一種代理以控制對這個物件的訪問。
將多個物件連成一條鏈,沿著這條鏈傳遞至每一個物件並處理請求。
請求以命令的形式封裝在物件中,並傳給調用對象。調用對象尋找可處理該命令的適合對象,並將命令傳給合適的對象執行。
提供一種方法可以順序性讀取一個集合物件中的各個元素,而又不會暴露該物件的內部表示。
定義一個 Mediator 物件用來封裝一組物件的互動方式。Mediator 藉由避免物件間相互直接的引用,從而降低它們之間的耦合程度,並且可以讓我們獨立地改變這些物件間的互動方式。
有狀態的物件,把複雜的邏輯判斷分配到不同的狀態物件中,允許狀態物件在其內部狀態發生改變時改變行為。
在不破壞封裝的前提下,儲存一個物件的某個狀態,以便於需要的時候將物件恢復到原先儲存的狀態。
多個物件之間存在著一對多的依賴關係,當一個物件發生改變時,所有跟他有關的物件都會被通知且更新。