模板模式(Template Pattern) —— 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template 提供了这种情况的一个实现框架。

Template模式是采用继承的方式实现:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。

#include<iostream>
using namespace std; //抽象类 实现总的通用算法框架,算法细节交给子类实现
class Abstact {
public:
virtual ~Abstact(){}
// 将不变的部分(通用的算法框架)在抽象类中实现,而将变化的部分(算法细节)抽象出来交给子类实现。
void TemplateMethod(){
cout<<"TemplateMethod:"<<endl;
this->PrimitiveOperation1();
this->PrimitiveOperation2();
}
protected:
virtual void PrimitiveOperation1()=0;
virtual void PrimitiveOperation2()=0;
Abstact(){}
}; //子类A,实现自己的算法细节
class ConcreteA: public Abstact{
public:
ConcreteA(){}
~ConcreteA(){}
protected:
void PrimitiveOperation1(){
cout<<"A ---> PrimitiveOperation1:"<<endl;
} void PrimitiveOperation2(){
cout<<"A ---> PrimitiveOperation2:"<<endl;
}
}; //子类B,实现自己的算法细节
class ConcreteB: public Abstact{
public:
ConcreteB(){}
~ConcreteB(){}
protected:
void PrimitiveOperation1(){
cout<<"B ---> PrimitiveOperation1:"<<endl;
} void PrimitiveOperation2(){
cout<<"B ---> PrimitiveOperation2:"<<endl;
}
}; int main(){
cout<< "template pattern."<<endl;
Abstact* a = new ConcreteA();
a->TemplateMethod();
Abstact* b = new ConcreteB();
b->TemplateMethod(); delete a;
delete b; return 0;
}

模板模式(Template Pattern)的更多相关文章

  1. 设计模式:模版模式(Template Pattern)

    android中的Activity框架,View框架中大量的on函数基本上都应用到了Template模式,掌握这一模式对于理解这些框架大有裨益. 模版模式 又叫模板方法模式,在一个方法中定义一个算法的 ...

  2. 《JAVA设计模式》之模板模式(Template)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  3. 设计模式:模版模式(Template Pattern)-转

    模版模式 又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤. 我们使用冲泡咖啡和冲泡茶的例子 加工流程 ...

  4. 学习笔记——模板模式Template

    模板模式,主要是利用多态来实现具体算法和父类逻辑的松耦合.父类中TemplateMethod内部定义了相应的算法操作顺序,子类负责实现相应的具体实现. 举例: 项目中曾遇到过一个需求,叫做高级价格体系 ...

  5. 设计模式之模板模式 template

    设计模式 模板模式如果有一个流程如下step1();step2();step3();step4();step5();其中step3() step5()是需要用户自己编写使用其他步骤是固定的那么可以写成 ...

  6. 【编程思想】【设计模式】【行为模式Behavioral】模板模式Template

    Python转载版 https://github.com/faif/python-patterns/blob/master/behavioral/template.py #!/usr/bin/env ...

  7. php模板模式(template design)

    没有写停止条件,所以会一直运行哟. <?php /* The template design pattern defines the program skeleton of an algorit ...

  8. 设计模式(十四)——模板模式(SpringIOC源码分析)

    1 豆浆制作问题 编写制作豆浆的程序,说明如下: 1) 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 2) 通过添加不同的配料,可以制作出不同口味的豆浆 3 ...

  9. 设计模式之GOF23模板模式

    模板模式template method 场景:具有具体流程,但具体某一步的业务不同 到银行办理业务:排队取号,办理业务,给员工打分 请客吃饭:等待,点单,吃饭,结账 模板方法模式介绍:模板方法是编程常 ...

  10. 13.java设计模式之模板模式

    基本需求: 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材.浸泡和放到豆浆机打碎这几个步骤对于制作每种口味 ...

随机推荐

  1. shell获取今天、明天、昨天、n天、周、月、年日期

    1.获取今天日期 $ date -d now +%Y-%m-%d   或者$ date +%F 1    2 2.获取明天日期 $ date -d next-day +%Y-%m-%d$ date - ...

  2. hdfs 通过命令坏块监测和删除或者地址获取参数做监控

    [root@nodecm.oldboy.org.cn /data/dfs/nn/current]# hdfs fsck -list-corruptfileblocksConnecting to nam ...

  3. Tosca case status PLANNED,IN-WORK,COMPLETED 对应的图标

    #PLANNED #IN-WORK #COMPLETED

  4. Mac OS 安装 MySQL5.7

    在 macOS 上安装 MySQL 5.7 安装 Homebrew $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubuserconten ...

  5. Leetcode: Longest Common Subsequence

    Given two strings text1 and text2, return the length of their longest common subsequence. A subseque ...

  6. 从0开始学爬虫2之json的介绍和使用

    从0开始学爬虫2之json的介绍和使用 Json 一种轻量级的数据交换格式,通用,跨平台 键值对的集合,值的有序列表 类似于python中的dict Json中的键值如果是字符串一定要用双引号 jso ...

  7. (?:pattern) 与 (?=pattern)的区别

    共同点 (?:pattern) 与 (?=pattern)都匹配pattern,但不会把pattern结果放到Matches的集合中. 区别 (?:pattern) 匹配得到的结果包含pattern. ...

  8. RabbitMQ 入门教程(PHP版) 第五部分:通过主题进行消息分发(Topics)

    对于 Message 的 routing_key 字符串格式是有限制的:以点号"."分割的字符表,如php.laravel,并且长度不能超过 255 个字节. 对于 routing ...

  9. 标量子查询调优SQL

    fxnjbmhkk4pp4 select /*+ leading (wb,sb,qw) */ 'blocker('||wb.holding_session||':'||sb.username||')- ...

  10. 123457123456#0#-----com.cym.shuXue02--前拼后广--开心学数学

    com.cym.shuXue02--前拼后广--开心学数学