代码写的不够规范,目的是为了缩短文章篇幅,实际中请不要这样做。

1、概述

  如其名,模板,也就是说,有一个已经做好的模板把框架做好了,剩下的,只需要我们将内容填充到模板下。 例如修房屋,框架结构搭建完成(模板框架搭建完成),工人砌砖(子类具体实现内容),砌砖有多种方式。

  还有,银行,对客户而言,我们的步骤是查不多一样的: 取号、排队、办理业务、评价业务(可能有)。取号和排队对每个人来说都是一样的, 办理业务和评价因人而异,A是办理取钱业务的,C是办理汇款业务的,D是办理开户业务的... 当然,评价更是因人而异。

  模板方法 和 上面的例子就很类似,抽象类中定义了大家公有的部分( 好比银行取号排队),这些在抽象类中实现,非共有的部分由子类实现(好比银行办理业务和评价)。

  下面以银行客户业务为例。

2、业务流程类(抽象)

  定义了业务流程和公有的业务。

// 银行业务流程(从上到下)
class step_bank_job
{
public:
// 取号
virtual void get_id() { cout << "\n取号成功,请等待服务,\n"; }; // 排队
virtual void get_in_line() { cout << "\n正在排队,请耐心等待\n"; }; // 办理业务(每个人要办理的业务是不一样的)
virtual void do_job() = 0; // 评价业务(每个人的评价也可能不一样)
virtual void comment(std::string str_comment) = 0;
};

3、因人而异的业务

  这里以取钱为例

// 取钱
class step_bank_job_withdraw : public step_bank_job
{
public:
// 办理业务(每个人要办理的业务是不一样的)
void do_job() { cout << "\n正在为您办理取钱业务\n"; } // 评价业务(每个人的评价也可能不一样)
void comment(std::string str_comment) { cout << "\n您的宝贵意见:【" << str_comment.c_str() << "】, 感谢您的光临,祝您生活愉快\n"; }
};

4、调用范例

 1 void call_template()
2 {
3 std::unique_ptr<step_bank_job> pwithdraw(new(std::nothrow) step_bank_job_withdraw);
4 if (!pwithdraw)
5 {
6 cout << "\n 您好,取钱系统故障,正在修复中....";
7 return;
8 }
9
10 // 办理业务
11 pwithdraw->get_id();
12 pwithdraw->get_in_line();
13 pwithdraw->do_job();
14 pwithdraw->comment(std::string("5星好评"));
15 }

5、业务办理结果:

c++设计模式概述之模板方法的更多相关文章

  1. 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)

      设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...

  2. OOAD-设计模式(二)之GRASP模式与GOF设计模式概述

    一.GRASP模式(通用责任分配软件模式)概述 1.1.理解责任 1)什么是责任 责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为.数据.对象的创建等 知道责任——表示知道什么 行为责任 ...

  3. PHP设计模式概述

    PHP设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...

  4. java设计模式概述

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

  5. Java设计模式学习记录-模板方法模式

    前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...

  6. 23种GoF设计模式概述

    23种GoF设计模式概述 在前面,我们对 GoF 的 23 种设计模式进行了分类,这里先对各个设计模式的功能进行简要介绍,以便有个大概了解.后面的章节再进行详细介绍. 创建型模式 关注于怎么创建对象的 ...

  7. Java设计模式(一):设计模式概述、UML图、设计原则

    1 设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...

  8. 设计模式(一)----设计模式概述及UML图解析

    1.设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...

  9. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

    在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...

随机推荐

  1. 【Python小试】计算目录下所有DNA序列的Kmer并过滤

    背景 Kmer是基因组组装算法中经常接触到的概念,简单来说,Kmer就是长度为k的核苷酸序列.一般长短为m的reads可以分成m-k+1个Kmer.Kmer的长度和阈值直接影响到组装的效果. Deno ...

  2. python 调用系统软件

    直接使用os模块的popen打开 import sys import os a=os.popen('/Soft/samtools-1.2/samtools flags '+sys.argv[1] ,' ...

  3. sig mesh 培训-18304

    1.mesh 的传输速率 ---有效数据最长的长度是10个字节 ---最小时间间隔是10ms,重传1次 --建议数据包之间不少于100ms 1S = 10*10 =100个字节 2.目前telink ...

  4. KEPServeEX 6与KepOPC中间件测试

    KEPServeEX 6可以组态服务器端和客户端连接很多PLC以及具有OPC服务器的设备,以下使用KEPServeEX 6建立一个OPC UA服务器,然后使用KepOPC建立客户端来连接服务器做测试. ...

  5. Vulnstack内网靶场5

    实验环境搭建 漏洞详情 (qiyuanxuetang.net) "此次靶场虚拟机共用两个,一个外网一个内网,用来练习红队相关内容和方向,主要包括常规信息收集.Web攻防.代码审计.漏洞利用. ...

  6. java四则运算规则

    java四则运算规则 1.基本规则 运算符:进行特定操作的符号.例如:+ 表达式:用运算符连起来的式子叫做表达式.例如:20 + 5.又例如:a + b 四则运算: 加:+ 减:- 乘:* 除:/ 取 ...

  7. JDBC01 获取数据库连接

    概述 Java Database Connectivity(JDBC)直接访问数据库,通用的SQL数据库存取和操作的公共接口,定义访问数据库的标准java类库(java.sql,javax.sql) ...

  8. InnoDB学习(二)之ChangeBuffer

    ChangeBuffer是InnoDB缓存区的一种特殊的数据结构,当用户执行SQL对非唯一索引进行更改时,如果索引对应的数据页不在缓存中时,InnoDB不会直接加载磁盘数据到缓存数据页中,而是缓存对这 ...

  9. Linux_spool命令

    spool的作用是什么? spool的作用可以用一句话来描述:在sqlplus中用来保存或打印查询结果. 参数指南 对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: ...

  10. Spring(4):Mybatis和Spring整合

    第一步:创建数据库 MySQL代码 1 CREATE DATABASE `mybatis` ; 2 3 USE `mybatis`; 4 5 CREATE TABLE `user` ( 6 `id` ...