Published on

《设计模式——可复用面向对象软件的基础》学习笔记(c++实现)

Authors
  • avatar
    Name
    Leon
    Twitter

Any problem in computer science can be solved with another level of indirection. —— David Wheeler
“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。”
Favor Composition Over Inheritance. 优先使用组合而非继承。

Ⅰ、设计模式

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动” ———— Christopher Alexander。

Ⅱ、创建型模式

创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。

创建型模式总结

创建型模式,它们的作用是为了产生实例对象。 工厂模式在简单工厂模式的基础上增加了选择工厂的维度,需要第一步选择合适的工厂;抽象工厂模式有产品族的概念,如果各个产品是存在兼容性问题的,就要用抽象工厂模式。单例模式为了保证全局使用的是同一个对象,一方面是安全必考虑,一方面 是为节省资源;生成器模式专门对付属性很多的那种类,为了让代码便优美;原型模式用得最少。

Ⅲ、结构型模式

结构型模式涉及到如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以上的类组合成一个类,结果这个类包含了所有父类的性质。这一模式尤其有助于多个独立开发的类库协同工作。结构开对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以在运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种机制用静态组合是不可能实现的。

结构型模式总结

Proxy 代理模式是做方法增强的,Adapter 适配器模式是用来适配接口的,Bridge 桥梁模式做到了很好的解耦,Decorator 装饰模式从名字上就看得出来,适合于装饰类或者说是增加类的场景,Facade 外观模式的优点是客户端不需要关心实例化过程,只要调用需要的方法即可,Composite 组合模式用于描述具有层次结构的数据,Flyweight 享元模式是为了在特定的场景中缓存已经创建的对象,用于提高性能。

Ⅳ、行为模式

行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这引起模式扁鹊了在运行时难以跟踪的复杂的控制流。它们将你的注意力从控制流转移到对象间的联系方式上来。行为类模式使用继承机制在类间分派行为。行为对象模式使用对象复合而不是继承。

Ⅴ、结论

面向对象软件的生命周期常分为几个阶段。Brain Foote将其分为原型阶段、扩展阶段和巩固阶段三个阶段。
一旦软件进入青春期并交付使用,其演化就由以下两个相互冲突的要求来决定:
(1)该软件必须满足更多的需求。
(2)该软件必须更易于复用。
软件若需要继续演化就必须重新组织,这个过程称为重构(refactoring)。


参考文献:

  1. 《设计模式——可复用面向对象软件的基础》——Erich Gamma、Richard Helm、RalphJohnson、JohnVlissides
  2. 《Design Pattern Explanation with C++ Implementation》——K_Eckel