当前位置: 首页 > news >正文

TempleteMethod

TempleteMethod

动机
  • 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因 (比如框架与应用之间的关系)而无法和任务的整体结构同时实现。
  • 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?
模式定义
  • 定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟 (变化)到子类中。Template Method使得子类可以不改变 (复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。
  • 在基类实现稳定的模板方法,变化的部分可以通过晚绑定(虚函数->函数指针)由子类实现(多态)。
    在这里插入图片描述
#include <iostream>
using namespace std;class AbstractClass
{
public:void templateMethod(){primitiveOperation1();primitiveOperation2();}virtual ~AbstractClass(){cout << "AbstractClass" << endl;}
protected://变化的由子类override来实现 也可以不是纯虚virtual void primitiveOperation1() = 0;virtual void primitiveOperation2() = 0;
};class ConcreteClass : public AbstractClass
{
public:void primitiveOperation1(){cout << "Primitive operation 1" << endl;}void primitiveOperation2(){cout << "Primitive operation 2" << endl;}~ConcreteClass(){cout << "ConcreteClass" << endl;}
};int main()
{AbstractClass *tm = new ConcreteClass;tm->templateMethod();delete tm;return 0;
}
/*
Primitive operation 1
Primitive operation 2
ConcreteClass	//逆序析构
AbstractClass
*/
总结
  • Template Method是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性) 为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
  • 除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用,也就是晚绑定。
  • 在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。
http://www.lryc.cn/news/180535.html

相关文章:

  • 1558. 得到目标数组的最少函数调用次数
  • 子域名扫描, 后台扫描
  • 毛玻璃带有光影效果的卡片
  • 【Java】面向过程和面向对象思想||对象和类
  • 孤举者难起,众行者易趋,openGauss 5.1.0版本正式发布!
  • 软考——软件设计师中级2023年11月备考(1.计算机组成原理)
  • 前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(四)
  • 【前端】HTML5 Audio 预加载 按照队列顺序播放音频, 可以陆续往队列中加内容
  • 【单片机】13-实时时钟DS1302
  • springboot和vue:十三、VueX简介与安装与推荐视频+前端数据模拟MockJS
  • [React] Zustand状态管理库
  • 【ChatGPT】ChatGPT发展历史
  • 分布式文件存储系统Minio实战
  • 【MySQL】MySQL 官方安装包形式
  • 使用sqlmap获取数据步骤
  • [论文笔记]GLM
  • 漏洞扫描环境:win10系统用VMware Workstation打开虚拟机若干问题
  • OpenCV实现模板匹配和霍夫线检测,霍夫圆检测
  • 消息队列实现进程之间通信方式
  • 用简单例子讲清楚webgl模板测试
  • 区块链(8):p2p去中心化之websoket服务端实现业务逻辑
  • composer安装与设置
  • unordered_map/unordered_set的学习[unordered系列]
  • C++位图—布隆过滤器
  • SQL SELECT 语句进阶
  • Mac程序坞美化工具 uBar
  • 【数据结构】排序之插入排序和选择排序
  • 6.html表单
  • 【python学习第11节:numpy】
  • Eclipse 主网即将上线迎空投预期,Zepoch 节点或成受益者?