c++设计模式概述之模板方法
代码写的不够规范,目的是为了缩短文章篇幅,实际中请不要这样做。
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++设计模式概述之模板方法的更多相关文章
- 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)
设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...
- OOAD-设计模式(二)之GRASP模式与GOF设计模式概述
一.GRASP模式(通用责任分配软件模式)概述 1.1.理解责任 1)什么是责任 责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为.数据.对象的创建等 知道责任——表示知道什么 行为责任 ...
- PHP设计模式概述
PHP设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...
- java设计模式概述
java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模 ...
- Java设计模式学习记录-模板方法模式
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...
- 23种GoF设计模式概述
23种GoF设计模式概述 在前面,我们对 GoF 的 23 种设计模式进行了分类,这里先对各个设计模式的功能进行简要介绍,以便有个大概了解.后面的章节再进行详细介绍. 创建型模式 关注于怎么创建对象的 ...
- Java设计模式(一):设计模式概述、UML图、设计原则
1 设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...
- 设计模式(一)----设计模式概述及UML图解析
1.设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...
随机推荐
- 全基因组选择育种(GS)简介
全基因组选择(Genomic selection, GS)是一种利用覆盖全基因组的高密度标记进行选择育种的新方法,可通过早期选择缩短世代间隔,提高育种值(Genomic Estimated Breed ...
- zabbix 集成cloud alert
1. 了解 Cloud Alert 通过应用,接入监控系统/平台的告警,集中管理您的告警,统一分派通知,统一分析.这个平台最先了解和使用是在 2017 年下半年,之前的名称叫 oneits ...
- void * 指针和const 指针
1.void * 是不能进行运算的,例如void *p p++; 这2个值是没有任何规律的. 2 .printf的时候打印void *p 指向的数据,必须强制类型转换,因为编译器不知道取地址多少位. ...
- 码上来战!探索“智”感生活,HMS Core线上Codelabs挑战赛第4期开始!
HMS Core线上Codelabs挑战赛第4期正式开始!我们向所有实践力超强.创新力满满的开发者发出邀请,用你的超级"码"力,解锁更多应用价值! 生活里,我们被手机"秒 ...
- C语言中的字节对齐
下面这个篇博客讲解很好 http://blog.csdn.net/meegomeego/article/details/9393783 总的来看分三类: 1. 不加 #pragma pack(n)伪指 ...
- ES6必知,箭头函数与普通函数的区别。
1. 箭头函数没有prototype(原型),所以箭头函数本身没有this let a = () =>{}; console.log(a.prototype); // undefined 2. ...
- 容器之分类与各种测试(三)——queue
queue是单端队列,但是在其实现上是使用的双端队列,所以在queue的实现上多用的是deque的方法.(只要用双端队列的一端只出数据,另一端只进数据即可从功能上实现单端队列)如下图 例程 #incl ...
- tableView和tableViewCell的背景颜色问题
当在tableView中添加cell数据时,我们会发现原本设置的tableView的背景颜色不见了,这是因为加载cell数据时,tableView的背景颜色被cell数据遮盖住了,此时,可以通过设置c ...
- redis入门到精通系列(二):redis操作的两个实践案例
在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...
- Mysql B-Tree和B+Tree索引
Mysql B-Tree和B+树索引 Mysql加快数据查找使用B-Tree数据结构存储索引数据,InnoDB存储引擎实际使用B+Tree.下面首先介绍下B-Tree和B+Tree的区别: 一.B树和 ...