软件设计模式
维基百科,自由的百科全书
設計模式(英語︰design pattern)這個術語是在1990年代,由Erich Gamma等人從建築設計領域引入到計算機科學裡去的。是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。設計模式並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。物件導向設計模式通常以類別或物件來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或物件。演算法不能算是一種設計模式,因為演算法主要是用來解決計算上的問題,而非設計上的問題。設計模式主要是使不穩定的依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟體設計面對並適應變化的能力。
並非所有的軟體模式都是設計模式,設計模式特指軟體設計層次上的問題。還有其它非設計模式的模式,如架構模式。
随着软件开发社群对设计模式的兴趣日益增长,已经出版了一些相关的专著,定期召开相应的研讨会,而且Ward Cunningham为此发明了WikiWiki用来交流设计模式的经验。
目录 |
[编辑] 發展歷史
建筑师克里斯托佛·亚历山大在1977/79年编制了一本汇集设计模式的书。但是这种设计模式的思想在建筑设计领域里的影响远没有后来在软件开发领域里传播的广泛。肯特·贝克和沃德·坎宁安在1987年利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接口的生成中。一年后Erich Gamma在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。于此同时James Coplien 在1989年至1991 年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作Advanced C++ Idioms。就在这一年Erich Gamma 得到了博士学位,然后去了美国,在那与Richard Helm, Ralph Johnson ,John Vlissides 合作出版了Design Patterns - Elements of Reusable Object-Oriented Software 一书,在此书中共收录了23个设计模式。这四位作者在软件开发领域里也以他们的匿名著称Gang of Four(四人帮,简称GoF),并且是他们在此书中的协作导致了软件设计模式的突破。有时这个匿名GoF也会用于指代前面提到的那本书。
[编辑] 表述格式
表述一个软件设计模式的格式根据作者的不同,划分和名称等都会有所不同。常用的GoF描述模式的格式大致分为以下这些部分:
- 模式名:每一个模式都有自己的名字,模式的名字使得我们可以讨论我们的设计。
- 问题:在面向对象的系统设计过程中反复出现的特定场合,它导致我们采用某个模式。
- 解决方案:上述问题的解决方案,其内容给出了设计的各个组成部分,它们之间的关系、职责划分和协作方式。
- 别名:一個模式可以有超過一個以上的名稱。這些名稱應該要在這一節註明。
- 动机:該模式應該利用在哪種情況下是本節提供的方案(包括問題與來龍去脈)的責任。
- 適用性︰模式適用於哪些情況、模式的背景等等。
- 结构:這部分常用類圖與互動圖闡述此模式。
- 参与者:這部分提供一份本模式用到的類與物件清單,與它們在設計下扮演的腳色。
- 合作:描述在此模式下,類與物件間的互動。
- 影響:采用该模式对软件系统其他部分的影响,比如对系统的扩充性、可移植性的影响。影响也包括负面的影响。這部分應描述使用本模式後的結果、副作用、與交換(trade-off)
- 實作:這部分應描述實現該模式、該模式的部分方案、實現該模式的可能技術、或者建議實現模式的方法。
- 示例:簡略描繪出如何以程式語言來使用模式。
- 已知应用:業界已知的實做範例。
- 相关模式:這部分包括其他相關模式,以及與其他類似模式的不同。
[编辑] 分類
[编辑] 基础模式
[编辑] 创建型模式
- 抽象工厂模式 (Abstract Factory)
- 生成器模式 (Builder)
- 工厂方法模式 (Factory Methord)
- 原型模式 (Prototype)
- 单例模式 (Singleton)
[编辑] 结构型模式
- 适配器模式 (Adapter)
- 桥接模式 (Bridge)
- 组合模式 (Composite)
- 容器模式
- 修饰模式 (Decorator)
- 扩展性模式
- 外观模式
- 享元模式
- 管道与过滤器模式
- 代理模式 (Proxy)
[编辑] 行为模式
- 责任链模式 (Chain of Responsibility)
- 命令模式 (Command)
- 柯里化模式
- 事件监听器模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式 (Memento)
- 观察者模式 (Observer)
- 状态模式 (State)
- 策略模式 (Strategy)
- 模板方法模式 (Template Method)
- 访问者模式 (Visitor)
- 层次访问者模式
[编辑] 并发模式
- 模式 Action at a distance
- 模式 Balking
- 模式 Guarded suspension
- 模式 Scheduler
- 模式 Read write lock
- 模式 Double checked locking
- 模式 Disable job requests while running job
[编辑] 实时模式
- 模式 Scheduled task
- 模式 User interface
- 模式 Disable job requests while running job
[编辑] 其他
[编辑] 批評
[编辑] 有別於元件,無法重用
[编辑] 和抽象化沒有太大的不同
[编辑] 參閱
[编辑] 参考资料
- Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides: Design Patterns, Addison-Wesley, 1995, hardcover, 395 pages, ISBN 0201633612, Design Patterns CD, 1997 ISBN 0201634988
- Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal: Pattern-oriented Software Architecture, Volume 1: A System of Patterns, John Wiley & Sons Ltd., ISBN 0471958697
- Douglas Schmidt: Pattern-oriented Software Architecture. Volume 2: Patterns for Concurrent and Networked Objects, John Wiley & Sons Ltd., ISBN 0471606952
- Alan Shalloway, James R. Trott: Design Patterns Explained: A New Perspective on Object-Oriented Design, Addison-Wesley, ISBN 0201715945
- Martin Fowler: Patterns of Enterprise Application Architecture, Addison-Wesley, ISBN 0321127420