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