Item 22. 模板方法与曲线救国(Template Method)
Item 22. Template Method
敬告
Template Method 与 C++中的templates毫不相干,它只是一种设计方法(亦或设计模式)。
------------------------
1、Template Method设计的目的
Template Method是用于基类设计的一种方法,它使得子类的任务更加清晰,让子类设计者的注意力集中于基类的contract是如何实现的,而不必关心各个contract之间的关系。对于基类来说就是“曲线救国”。
2、从继承角度看成员函数
虚函数,纯虚函数,非虚函数
对虚函数函数,子类设计者有权利选择是否Overriding它。因此基类设计者就需要对它有一个默认的实现。
对纯虚函数,子类就必须要Overriding它。
而非虚函数,子类可以写一个与基类有的一样的非虚函数(not called Overriding),但子类里的这个函数又不能用于多态机制,所以还是不要写它。
3、从访问权利看成员函数
private,public,protected
……
4、Template Method 的实现
Template Method 就是依靠2、3两点来实现的。
基类用一个public nonvirtual 成员函数访问protected virtual成员函数,
子类在需要的时候可以选择Overriding那个protected virtual成员函数,如果是个
pure protected virtual成员函数,那就必须Overriding它。
class App {
public:
virtual ~App();
//...
void startup() { // Template Method
initialize();
if( !validate() )
altInit();
}
protected:
virtual bool validate() const = 0;
virtual void altInit();
//...
private:
void initialize();
//...
};
class MyApp : public App {
public:
//...
private:
bool validate() const;
void altInit();
//...
};
5、为什么要用Template Method?
Template Method使得基类控制了函数的调用顺序(执行流程),子类只负责某个步骤的实现(具体要看是虚还是纯虚)。这样在子类不知道执行细节的情况下,整个系统就动起来了。确实很妙!MFC就是这样的。
所以就不要奇怪当年有人选择“曲线救国”那条路了
转载于:https://www.cnblogs.com/wuwuwu/archive/2005/04/14/6335349.html
Item 22. 模板方法与曲线救国(Template Method)相关推荐
- 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)
23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...
- 行为型设计模式(2)—— 模板方法模式(Template Method Pattern)
文章目录 1.概述 2.简单实现 3.使用场景和优缺点 4.小结 参考文献 1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性. 模板方法模式(Template Method Patte ...
- Carson带你学设计模式:模板方法模式(Template Method)
前言 今天Carson来全面总结最常用的设计模式 - 模板方法模式. Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你 ...
- Java设计模式——模板方法模式【Template Method Pattern】
一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...
- 模板方法模式(Template Method)
14.模板方法模式(Template Method) 解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1-n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象 ...
- 每天一个设计模式之模板方法模式(Template Method Pattern)
所谓的模板模式就是基类(抽象类)提供出定义好的一个模板(空实现+默认实现),子类按照模板封装好的顺序去填充模板内方法的实现. 一.UML类图 图中,templateMethod是对子类暴露出的方法,它 ...
- 设计模式之禅——模板方法模式(Template Method Pattern)
1.基本概念 Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Templa ...
- 设计模式:模板方法模式(Template Method)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- C#设计模式---模板方法模式(Template Method Pattern)
一.目的 模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码. 二.定义 模板方法模式:在一个抽象类中定义一个操作的算法骨架,将算法骨架中某些特定的操作延迟到子类中实现. 模板方法使得子类在 ...
- 【Unity3D与23种设计模式】模板方法模式(Template Method)
GoF中定义: "在一个操作方法中定义算法的流程,其中某些步骤由子类完成. 模板方法模式让子类在不变更原有算法流程的情况下,还能够重新定义其中的步骤" 每一次武器攻击目标时,都要按 ...
最新文章
- 利用zxing读写PDF417码制的二维码
- android组合动画还原,Android - Fragment,View动画,组合动画,属性动画
- numpy的cumsum ()函数
- (五)C语言之二维数组
- linux 32bit 改为64bit问题
- php 自动处理小图的代码,php对图像的各种处理函数代码小结
- 840万应届生创历史新高,企业大规模缩招,互联网行业首次出现需求负增长
- 从零开始山寨Caffe·贰:主存模型
- Ajax到底是什么?
- mysql 存储过程代码_mysql存储过程语法与实例
- shell 学习之case语句
- 牛客JS编程大题(一)
- hpasmcli查看HP服务器内存状态
- 基于PHP的个人博客网站系统
- 影评分析第3篇 上映4天,票房7.4亿的《海王》,用数据看大片!
- ThinkPHP5 引入 Go AOP
- 真·杂项:资本论阅读笔记(随缘更新)
- 核心游戏系统架构设计
- 安装python的时候遇到的问题,无法安装bz2modules等
- Uncaught ReferenceError: Cannot access ‘f1‘ before initialization