二、“组件协作”模式
2.1 模板方式(Template Method)
2.1.1 动机
2.1.2 早绑定与晚绑定
一般的程序结构,都是晚期程序去调用早期程序
<br>
Template Method 提倡晚绑定,即早期程序调用晚期程序,动态部分由晚期程序(子类)实现。这需要通过虚函数实现。
<br>
2.1.4 要点
Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点(虚函数,子类继承可以override),是代码复用方面的基本实现结构。<br>除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用。<br>在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。<br>
2.2 策略模式(Strategy)
2.2.2 模式定义
2.2.3 结构
上部分红色为稳定部分,相当于税法基类和SalesOrder<br>下部分蓝色为扩展部分,相当于示例中的税法
2.2.4 要点
2.3 观察者模式(Observer)
2.3.2 模式定义
2.3.3 结构
2.3.4 要点
一些术语
use-a关系
如果类A与类B是 use-a 关系,则A具有类型为B、B&、const B&、B*、const B*的一个成员,<br>或者是可以轻易以上述对象之一返回一个B的函数。于是A可以使用B的程序和数据。
has-a关系
has-a 类似于 use-a,不同之处在于,A负责构建和销毁B并在它的生存期使用它。
is-a关系
如果类A和类B是 is-a 关系,则B必须是A的抽象,B应当只重载基类。is-a的关系通常出现在公共派生的C++中 。
is-like-a(其实就是一种use-a)
派生自基类并增加了一些新的接口
is-implemented-as-a关系(实现关系)
如果类A与接口M是实现关系,则它实现了M所有的纯虚函数。接口实现是Symbian OS中唯一使用多重继承的地方。