Design Pattern:
如果發現處於某種情境下,面對著一群限制的問題,正影響著所欲達成的目標,然而,你能夠採用某個設計,克服這些限制並達到該目標,將你領向某個解決方案。問題
情境
解決方案
模式是一種被證實過的設計經驗,可以避免某些常見的錯誤。
模式是共通詞彙,能夠讓我們和其他開發者之間,針對設計進行溝通。
第一種
生成:
生成模式牽涉到將物體實體化,這類模式都提供一個方法,將客戶從所需要實體化的物件中鬆綁出來。Singleton
Builder
Prototype
Abstract Factory
Factory Method
行為:
它的重點都在於類別和物件如何互動,以及各自的責任。Mediator
Visitor
Iterator
Template Method
Command
Memento
Interpreter
Observer
Chain of Responsibility
State
Strategy
結構:
讓你合成類別或物件到大型的結構。Decorator
Composite
Proxy
Facade
Bridge
Flyweight
Adapter
第二種
類別:
會描述類別之間的關係如何透過繼承定義。在編譯時期就建立好的。Template Method
Factory Method
Adapter
Interpreter
物件:
定義物件之間的關係,而且物件模式的關係正常是在執行期建立的,而且更動態、更有彈性。Composite
Decorator
Proxy
Strategy
Bridge
Flyweight
Abstract Factory
Singleton
Builder
Prototype
State
Mediator
Chain of Responsibility
Facade
Command
Visitor
Interator
Observer
Memento
Command
用模式思考:
1.保持簡單 Keep It Simple
設計簡單且有彈性,有時候需要使用設計模式或是完全不需要模式。2.設計模式非萬靈丹(模式可依專案修改,沒有絕對)
3.知道何時需要模式
加入模式是要因應實際的改變,而不是假定的改變。4.重構的時間,就是模式時間
重新檢視你的設計是否能夠利用模式讓他擁有更好的結構。5.拿掉不需要的設計模式
6.現在不需要就不做
Head First Design Pattern 提到的設計守則:
1.找出程式中可能需要更動之處,把它們獨立出來,不要和不需要更動的程式碼混在一起。
2.程式是針對介面而寫而不是真針對實踐方式而寫。
3.多用合成,少用繼承。
4.設計時,盡量讓需要互動的物件之間關係鬆綁。
5.類別應該開放以便於修改。類別應該關閉以便於禁止修改。
6.繼承屬於擴充形式之一,但不見得是達到彈性設計的最佳方法。
7.將建立的程式碼集中在一個物件或行為中,可避免程式碼重複和易修改。
8.依賴抽象類別,不要依賴具體類別。
9.變數不可以持有具象類別的參考。
10.不要讓類別繼承自具象類別。
11.不要讓次類別中的方法覆寫超類別中的方法
PS.一定會有衝突和無法遵守的時候.
No comments:
Post a Comment