设计模式笔记-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;
}

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

相关文章推荐

Java设计模式学习笔记之 —— 模板方法(Template Method)

跟随郭霖大神的脚步学习设计模式,真是通俗易懂~赞: 原文出处:http://blog.csdn.net/guolin_blog/article/details/8744002模板方法: 定义一个操...

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

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

设计模式学习笔记---模板方法模式template method pattern(Java版)

一、场景 客服到银行办理业务: 1、取号排队 2、办理具体现金/陷阱/转账/企业/个人/理财业务 3、给银行工作人员评分二、实质 它定义了一个操作中的算法骨架...

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

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

设计模式(c++)笔记之十三(Template模式)

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

设计模式C++学习笔记之九(Template Method模板方法模式)

模板模式也是相当简单的一种模式,而且是比较常用的。模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

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

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

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

//---------------------------15/04/28---------------------------- //TemplateMethod 模版方法模式--...
  • boydfd
  • boydfd
  • 2015年04月28日 16:30
  • 749

设计模式之模板方法(Template)

  • 2011年07月07日 09:39
  • 10KB
  • 下载

Java设计模式透析之 —— 模板方法(Template Method)

今天你还是像往常一样来上班,一如既往地开始了你的编程工作。 项目经理告诉你,今天想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式笔记-Template模式
举报原因:
原因补充:

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