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)相关推荐

  1. 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  2. 行为型设计模式(2)—— 模板方法模式(Template Method Pattern)

    文章目录 1.概述 2.简单实现 3.使用场景和优缺点 4.小结 参考文献 1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性. 模板方法模式(Template Method Patte ...

  3. Carson带你学设计模式:模板方法模式(Template Method)

    前言 今天Carson来全面总结最常用的设计模式 - 模板方法模式. Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你 ...

  4. Java设计模式——模板方法模式【Template Method Pattern】

    一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  5. 模板方法模式(Template Method)

    14.模板方法模式(Template Method) 解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1-n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象 ...

  6. 每天一个设计模式之模板方法模式(Template Method Pattern)

    所谓的模板模式就是基类(抽象类)提供出定义好的一个模板(空实现+默认实现),子类按照模板封装好的顺序去填充模板内方法的实现. 一.UML类图 图中,templateMethod是对子类暴露出的方法,它 ...

  7. 设计模式之禅——模板方法模式(Template Method Pattern)

    1.基本概念 Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Templa ...

  8. 设计模式:模板方法模式(Template Method)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. C#设计模式---模板方法模式(Template Method Pattern)

    一.目的 模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码. 二.定义 模板方法模式:在一个抽象类中定义一个操作的算法骨架,将算法骨架中某些特定的操作延迟到子类中实现. 模板方法使得子类在 ...

  10. 【Unity3D与23种设计模式】模板方法模式(Template Method)

    GoF中定义: "在一个操作方法中定义算法的流程,其中某些步骤由子类完成. 模板方法模式让子类在不变更原有算法流程的情况下,还能够重新定义其中的步骤" 每一次武器攻击目标时,都要按 ...

最新文章

  1. 利用zxing读写PDF417码制的二维码
  2. android组合动画还原,Android - Fragment,View动画,组合动画,属性动画
  3. numpy的cumsum ()函数
  4. (五)C语言之二维数组
  5. linux 32bit 改为64bit问题
  6. php 自动处理小图的代码,php对图像的各种处理函数代码小结
  7. 840万应届生创历史新高,企业大规模缩招,互联网行业首次出现需求负增长
  8. 从零开始山寨Caffe·贰:主存模型
  9. Ajax到底是什么?
  10. mysql 存储过程代码_mysql存储过程语法与实例
  11. shell 学习之case语句
  12. 牛客JS编程大题(一)
  13. hpasmcli查看HP服务器内存状态
  14. 基于PHP的个人博客网站系统
  15. 影评分析第3篇 上映4天,票房7.4亿的《海王》,用数据看大片!
  16. ThinkPHP5 引入 Go AOP
  17. 真·杂项:资本论阅读笔记(随缘更新)
  18. 核心游戏系统架构设计
  19. 安装python的时候遇到的问题,无法安装bz2modules等
  20. Uncaught ReferenceError: Cannot access ‘f1‘ before initialization

热门文章

  1. centos 安装 lua运行环境   非yum安装
  2. Arrays和比较器
  3. 函数——C++的编程模块
  4. 9-汇编转移指令-offset+jmp+jcc+loop
  5. Java多线程-while死循环
  6. Santander Customer Transaction Prediction(2)
  7. Python,PyCharm2017安装教程,包含注册码
  8. 数据--第25课 - 队列课后练习
  9. [Reinforcement Learning] 动态规划(Planning)
  10. MySQL设置字符编码