作者:徐建祥( netpirate@gmail.com)
時間:
來自:http://www.anymobile.org
1、? 何謂模式
“每個模式就是一條由三部分組成的規則,它表示了一個特定環境、一個問題和一個解決方案之間的關系。 ”--《建筑的永恒之道 》 (Christopher Alexander)
模式,就是對特定場景中,不斷重復發生的問題,以及該問題的解決方案的整體抽象描述。
2、? 設計原則
2??????? 開閉原則 (OCP , Open-Closed Principle)
是面向對象可復用的基石。模塊、方法和類應該對擴展是開放的,而對更改是封閉的;對可變性進行封裝。
2??????? 里氏代換原則 (LSP , Liskov Substitution Principle)
是繼承復用的基石。在任何父類出現的地方都可以用它的子類來替代。在實際設計類的階層體系結構時,這是一條很重要的原則。
2??????? 依賴反轉原則 (DIP , Dependence Inversion Principle)
針對接口編程,要依賴于抽象,不要依賴于具體的實現,也叫控制反轉, IoC 。
2??????? 接口隔離原則 (ISP , Interface Segregation Principle)
使用多個專門的接口總是比使用單一的總接口要好。
2??????? 合成 / 聚合復用原則 (CARP , Composite or Aggregate Reuse Principle)
聚合:表示擁有或整體與部分的關系。
合成:更強的聚合關系。
盡量使用和成 / 聚合而不是繼承來實現復用 , “ Has-A ”替代“ Is-A ”(繼承)。 ??
2??????? 迪米特法則 (LoD , Law of Demeter)
一個對象應當對其他對象盡可能少的了解。降低各個單元的耦合,提高系統的可維護性。
3、? GOF 設計模式
“設計模式是對被用來在特定場景下解決一般設計問題的類和相互通信的對象的描述。”--《 Design Patterns 》 ( Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides )
設計模式充分利用語言優勢,站在更高的角度去審視我們的設計,但是不要為了模式而設計。
按照模式的目的和范圍準則, GOF 將眾多的設計模式分為 3 類,共 23 個設計模式。
3.1 創建型( Creational )
抽象工廠( Abstract Factory ) O
生成器( Builder ) O
工廠方法( Factory Method ) O
原型( Prototype ) O
單件( Singleton ) O
3.2 結構型( Structural )
適配器( Adapter ) C O
橋接( Bridge ) O
組合( Composite ) O
裝飾( Decorator ) O
外觀( Fa?ade ) O
享元( Flyweight ) O
代理( Proxy ) O
3.3 行為型( Behavioral )
責任鏈( Chain Responsibility ) O
命令( Command ) O
解釋器( Interpreter ) C
迭代( Iterator ) O
中介者( Mediator ) O
備忘錄( Memento ) O
觀察者( Observer ) O
狀態( State ) O
策略( Strategy ) O
模板方法( Template Method ) C
訪問者( Visitor ) O
4、? 如何使用設計模式
1)????? 學習模式,考慮設計模式是怎樣解決問題以及相互的關聯性;
2)????? 尋找合適的對象,決定對象的粒度,制定對象接口,描述對象之間的關系;
3)????? 使用設計模式進行優化,權衡性能和靈活性;
4)????? 只有當模式提供的靈活性真正需要時,才有必要使用;
5)????? 設計不能遷就模式,模式為設計服務。
參考:
《 Design Patterns 》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
《 Java 與模式》閻宏