文档章节

设计模式学习--模板方法模式

丿咖啡灬微凉
 丿咖啡灬微凉
发布于 2017/04/17 23:57
字数 465
阅读 2
收藏 0

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


模板发放模式特点

  模板方法模式就是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。

    模板方法模式就是提供了一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。


#include <iostream>

using namespace std;

class Text										//模板类								
{
public:
	void TextQuestion1()						//问题1
	{
		cout<<"“大煮干丝”是哪个菜系的代表菜之一( )。"<<endl<<"A四川菜系 B山东菜系 C广东菜系 D淮扬菜系"<<endl;
		cout<<"答案:"<<TextAnswer1()<<endl;
	}
	virtual string TextAnswer1()				//问题1的答案  虚函数
	{
		return "";
	}
	
	void TextQuestion2()						//问题2
	{
		cout<<"红茶属于( )茶。"<<endl<<"A半发酵 B发酵 C不发酵 D微发酵"<<endl;
		cout<<"答案:"<<TextAnswer2()<<endl;
	}
	virtual string TextAnswer2()				//问题2的答案  虚函数
	{
		return "";
	}
};

class TextPaperA : public Text					//学生A的答卷
{
public:
	string TextAnswer1()						//学生A对第一题的答案
	{
		return "A";
	}
	
	string TextAnswer2()						//学生A对第二题的答案
	{
		return "D";
	}
};

class TextPaperB : public Text					//学生B的答卷
{
public:
	string TextAnswer1()						//学生B对第一题的答案
	{
		return "B";
	}
	
	string TextAnswer2()						//学生B对第二题的答案
	{
		return "A";
	}
};

int main()
{
	cout<<"学生A的答卷:"<<endl;
	Text* student1 = new TextPaperA;
	student1->TextQuestion1();
	student1->TextQuestion2();
	
	cout<<"\n学生B的答卷:"<<endl;
	Text* student2 = new TextPaperB;
	student2->TextQuestion1();
	student2->TextQuestion2();
	
	return 0;
}

显示效果:


本文转载自:http://blog.csdn.net/hjf161105/article/details/60974864

丿咖啡灬微凉
粉丝 1
博文 70
码字总数 0
作品 0
私信 提问
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
201
0
设计模式知识汇总(附github分享)

写在前面 主要内容 为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也...

landy8530
2018/10/10
0
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
268
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
154
0
EasyToLearnDesignPattern

简单上手设计模式 GITHUB:https://github.com/Fisher-Joe/EasyToLearnDesignPattern 本文旨在使用最简单的语言,最简单的代码让人学习设计模式(最起码是我) 说明: 本文的所有内容都是基于...

芝麻开门
04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
10
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
23
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部