Saturday, December 22, 2012

Desing Pattern–Overview

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