对于设计模式初学者来说,GoF的这本设计模式(可复用面向对象软件的基础)是有些难理解的,因此我先看了视频教程,附上教程链接网址https://www.bilibili.com/video/av52251106/?p=3。
以下是我的学习笔记整理,分享给有需要的朋友,记录的比较简单,如有不理解的地方可以看原教程视频链接,或者留言给我,本小菜和你一起探讨。
1.从目的来看:
(1)创建型模式(creational):将对象的部分创建工作延迟到子类或者其他对象,从而对需求变化为对象创建时具体类型实现引来的冲击。
(2)结构型模式(structural):通过类继承或者对象组合获得更灵活的结构,从而应对需求变化为对象的结构带来的冲击。
(3)行为型模式(Behavioral):通过类继承或者对象组合来划分类与对象间的职责,从而应对需求变化为多个交互的对象带来的冲击。
2.从范围来看:
(1)类模式处理类与子类的静态关系。
(2)对象模式处理对象间的动态关系。
3.“应对变化,提高复用”
“寻找变化点,在变化点处应用设计模式”
敏捷软件考开发:refactoring to patterns,重构,没有一步到位的设计模式。
4.重构关键技法
静态->动态
早绑定->晚绑定
继承->组合
编译时依赖->运行时依赖
紧耦合->松耦合
5.“组件协作”模式:
框架与应用。晚期绑定,松耦合。
典型模式:
Template Method
Strategy
Observer/Event
6.Template Method
稳定的整体,子步骤有改变。
模式定义:
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。
Template Method使得子类可以不改变(复用)一个算法的结构即可重定义
(override重写)该算法的某些特定步骤。
7.要点总结
(1)Template Method模式是一种非常基础性的设计模式,
机制简洁(虚函数,提供扩展点,扩展:继承+多态(虚函数))。
(2)“不要调用我,让我来调用你”的反响控制机制。
(3)被Template Method调用的虚函数,推荐使用protected,因为
为固定流程使用,其他类中通常不调用。
8.Template Method模式代码实例