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 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...
随机推荐
- python-django-聚合与统计
l例子1: 这里的values_list 相当于SQL语句里面的GROUP BY的功能,但是返回的是一个元组 要实现示例当中的直接用,与数据库格式有关将模型设计得更加完美 模型: 注意related_ ...
- getdelim函数
利用getdelim函数分割读取字段,将文件制表符替换为空格符 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main( ...
- 67-Gray Code
Gray Code My Submissions QuestionEditorial Solution Total Accepted: 60277 Total Submissions: 165212 ...
- php操作mongodb手册地址
php操作mongodb手册地址: http://php.net/manual/zh/class.mongocollection.php
- 使用SpringBoot实现登录注册的几个问题
一.用户名密码都正确的情况下被登录拦截器拦截 控制台报错:org.apache.ibatis.executor.ExecutorException: A query was run and no Re ...
- c#年份筛选
年份: <script type="text/javascript" src="http://www.shicishu.com/down/WdatePicker.j ...
- Flume对接Kafka
目录 一.简单实现 1)flume的配置文件 二.自定义interceptor(使用kafka sink) 1)自定义 flume 拦截器 2)编写 flume 的配置文件 3)创建topic 4)启 ...
- oracle 根据ids转names
WITH t AS (SELECT '1,2,3,4' a, 1 b FROM Dual UNION ALL SELECT '1,2,3' a, 2 b FROM Dual),p AS ( ...
- 【Java基础】ArrayList初始化操作
要用60个零初始化列表,请执行以下操作: List<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, ...
- PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台
定时任务是后端系统开发中少不了的一个基本必备技能. 传统的实现定时任务的方式有很多种,比如直接使用操作系统的Timer和TaskSchedule,或者基于Quartz.HangFire.xxl-job ...