天天看点

模板方法——设计模式0 归属组件协作模式1 动机(Motivation)2 结构化软件设计流程3 面向对象软件设计流程4 早绑定与晚绑定5 模式定义6 结构7 要点总结

模板方法Template Method

  • 0 归属组件协作模式
  • 1 动机(Motivation)
  • 2 结构化软件设计流程
  • 3 面向对象软件设计流程
  • 4 早绑定与晚绑定
  • 5 模式定义
  • 6 结构
  • 7 要点总结

本文根据设计模式学习视频编写

李建忠-23个设计模式

0 归属组件协作模式

 现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。

 典型模式

• Template Method

• Observer / Event

• Strategy

这种划分并非是严格的,只是这些模式(上述三种模式)在这方面(组件协作)体现得更加明显。

1 动机(Motivation)

(1)在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。

(2)如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?

应用程序开发人员结构化和面向对象程序设计对比

模板方法——设计模式0 归属组件协作模式1 动机(Motivation)2 结构化软件设计流程3 面向对象软件设计流程4 早绑定与晚绑定5 模式定义6 结构7 要点总结

程序库开发人员结构化和面向对象程序设计对比

模板方法——设计模式0 归属组件协作模式1 动机(Motivation)2 结构化软件设计流程3 面向对象软件设计流程4 早绑定与晚绑定5 模式定义6 结构7 要点总结

2 结构化软件设计流程

模板方法——设计模式0 归属组件协作模式1 动机(Motivation)2 结构化软件设计流程3 面向对象软件设计流程4 早绑定与晚绑定5 模式定义6 结构7 要点总结

3 面向对象软件设计流程

模板方法——设计模式0 归属组件协作模式1 动机(Motivation)2 结构化软件设计流程3 面向对象软件设计流程4 早绑定与晚绑定5 模式定义6 结构7 要点总结

4 早绑定与晚绑定

模板方法——设计模式0 归属组件协作模式1 动机(Motivation)2 结构化软件设计流程3 面向对象软件设计流程4 早绑定与晚绑定5 模式定义6 结构7 要点总结

Library一般写得早,完成得早,早绑定是结构化语言程序设计的一般做法,如c语言。而面向对象语言中,可通过虚函数来实现晚绑定。

5 模式定义

定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。

——《设计模式》GoF

软件需要有稳定的部分和变化的部分,识别出变化和稳定分界后,设计模式才有用武之地。一个软件完全稳定或者全部都在变化,则所有设计模式都将失效。

6 结构

模板方法——设计模式0 归属组件协作模式1 动机(Motivation)2 结构化软件设计流程3 面向对象软件设计流程4 早绑定与晚绑定5 模式定义6 结构7 要点总结

AbstractClass

稳定:

TemplateMethod()相当于Run()

变化:

PrimitiveOperation1()相当于Step2()

PrimitiveOperation2()相当于Step4()

7 要点总结

(1)Template Method模式是一种非常基础性的设计模式,在面向对 象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性) 为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。

扩展:在面向对象设计领域中,扩展即为继承+虚函数。子类继承父类,对父类的虚函数重写的过程即为扩展。

(2)除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用。

(3)在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。

继续阅读