書不怕被多翻閱幾次,每次閱讀總會有不同的收穫!拿起身旁的「物件導向設計模式」這本書,兩年前(2009)對於設計模式非常有興趣,不過看完沒有多少體悟,經過兩年的軟體開發經歷,現在對於設計模式有不同的心得感想。
設計模式(Design Patterns)開宗明義指出:「
設計物件導向軟體很難,設計可再利用(reusable)的物件導向軟體更難。(Designing object-oriented software is hard, and designing reusable objectoriented software is even harder.)」設計模式的目的與意義就是解決這個設計問題,由四人幫(Gang of Four, GoF)將物件導向設計的成功經驗整理成為「設計模式」,藉由設計模式將成功的設計與架構更容易可再被利用,讓設計師更快設計出正確的軟體,讓新的系統開發者更容易進入狀況。
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides著(所稱「四人幫」),葉秉哲譯,物件導向設計模式:可再利用物件導向軟體之要素,台北:台灣培生教育,2001。譯自:Design Patterns: Elements of resuable object-oriented software
「設計模式」一詞源於美國建築理論學家─克里斯多福‧亞歷山大(Christopher Alexander),他解釋:
每一則
模式都在描述某種一再出現的問題,並描述解決方案的核心,讓你能據以變化出各種招式,解決上萬個類似的問題。
Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.
物件導向的設計模式由四人幫提出3大類(依據目的劃分)共23種設計模式,由他們對設計模式命名與編纂(ㄗㄨㄢˇ)成型錄。
X | 目的 |
生成模式
(Creational Patterns) | 結構模式
(Structural Patterns) | 行為模式
(Behavioral Patterns) |
範疇 | 類別 | 工廠方法模式
(Factory Method) | 轉接器模式
(Adapter) | 解譯器模式
(Interpreter)
範本方法模式
(Template Method) |
物件 | 抽象工廠模式
(Abstract Factory)
建造者模式
(Builder)
原型模式
(Prototype)
獨體模式
(Singleton) | 轉接器模式
(Adapter)
橋接模式
(Bridge)
組合模式
(Composite)
裝飾模式
(Decorator)
外觀模式
(Façade)
享元模式
(Flyweight )
代理模式
(Proxy) | 職責鏈模式
(Chain of Responsibility)
命令模式
(Command)
迭代器模式
(Iterator)
仲介者模式
(Mediator)
備忘錄模式
(Memento)
觀察者模式
(Observer)
狀態模式
(State)
策略模式
(Strategy)
訪問者模式
(Visitor) |
由上表可以看到設計模式使用的範疇分為兩類,一是類別,另一是物件。類別模式處理類別與子類別之間的設計方式,在程式編譯期間(compile-time)就已經決定,屬於
靜態關係。而物件模式則是處理物件之間的設計方式, 在程式執行期間(run-time)才運作,屬於
動態關係。
有關物件導向設計模式必須慢慢仔細品嚐,才能發覺其中設計的精神!
###
延伸閱讀
物件導向設計模式