设计模式笔记-Template模式

原创 2016年05月30日 16:30:26

模板模式,逻辑很清晰,容易实现,用的也多!需求情景就是:对一个业务逻辑/算法实现,在不同对象中有不同的细节实现,但是逻辑的框架是相同的!就是说它们的操作步骤/接口是相同的,以继承的方式实现!看下图UML就明白了:到公司应聘,公司给每人发一个简历表,让大家填,而不是直接用每个人自己带的简历!

有几点:

1. 将逻辑框架放在抽象基类中,并定义好细节的接口,子类中实现细节! 这和Strategy模式不同,后者是将逻辑封装到一个类中,采取组合的方式解决这个问题!见后一篇!

2. 上图中FillResume()函数里实现的就是逻辑的框架,其中肯定调用了三个SetXxx函数!

3. 三个SetXxx()函数都是protect成员, 经public继承后都只提供给模板方法调用,单独对外开放没实际意义!

上面这种设计原则被称为依赖倒置(DIP, Dependency Inversion Principles):父类调用子类的操作,子类接口实现父类声明的接口!控制权在父类,子类反而要依赖高层模块!

模板模式的缺点:假设有另一个Resume抽象基类的变体AnotherResume,它们通用算法不一样,但SetXxx实现有些是一样的,想复用Resume子类的具体算法实现就不可能了,因为人家细节实现是靠继承完成的,它没有继承Resume。 这个问题,也可以通过Strategy模式的组合方式解决!

//简历
class Resume
{
protected: //保护成员
	virtual void SetPersonalInfo() {}
	virtual void SetEducation() {}
	virtual void SetWorkExp() {}
public:
	void FillResume() 
	{
		SetPersonalInfo();
		SetEducation();
		SetWorkExp();
	}
};
class ResumeA: public Resume
{
protected:
	void SetPersonalInfo() { cout<<"A's PersonalInfo"<<endl; }
	void SetEducation() { cout<<"A's Education"<<endl; }
	void SetWorkExp() { cout<<"A's Work Experience"<<endl; }
};
class ResumeB: public Resume
{
protected:
	void SetPersonalInfo() { cout<<"B's PersonalInfo"<<endl; }
	void SetEducation() { cout<<"B's Education"<<endl; }
	void SetWorkExp() { cout<<"B's Work Experience"<<endl; }
};
int main()
{
	Resume *r1;
	r1 = new ResumeA();
	r1->FillResume();
	delete r1;
	r1 = new ResumeB();
	r1->FillResume();
	delete r1;
	r1 = NULL;
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

设计模式 Template模式

在面向对象系统的分析与设计过程中经常会遇到这样一种情况: 一个流程可以分为A,B,C….多个步骤,但在具体的步骤中可能会有不同的情况出现,这时就Template模式就非常有用:class P(obje...

设计模式 - Template模式

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

设计模式笔记(12 STRATEGY & TEMPLATE METHOD)

设计模式笔记(12 STRATEGY & TEMPLATE METHOD) STRATEGY(策略) 适用性: 1.许多相关的类仅仅是行为有异。”策略“提供了一种用多个行为中的一个行...

设计模式学习笔记--模板方法(Template Method)模式

模板方法模式:准备一个抽象类,将部分逻辑以具体方法以及具体构造的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方法实现这些抽象的方法,从而对剩余的逻辑有不同的实现。这就...

Template(模板)设计模式

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

设计模式 笔记 模版方法模式 Template Method

//---------------------------15/04/28---------------------------- //TemplateMethod 模版方法模式--...

设计模式学习笔记——模板(Template)模式

设计模式学习笔记——模板(Template)模式@(设计模式)[设计模式, 模板模式, template, 模板方法]设计模式学习笔记模板Template模式 基本介绍 模板案例 类图 实现代码 Ab...

设计模式(1)-模板模式(Template)

【更新】 2012-7-9,设计模式(5)-装饰模式(Decorator),运用装饰模式的版本 2012-6-18,添加实例下载地址,文章末尾 2012-6-8,更新示例代码 ...

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

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

设计模式_模版模式(Template Pattern)

模版模式正文内容有时间写
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)