设计模式笔记-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 Pattern】

一、概述 二、适用chuangk
  • l416112167
  • l416112167
  • 2014年11月11日 01:09
  • 2819

模板方法模式(Template Method) - 最易懂的设计模式解析

前言今天我来全面总结一下Android开发中最常用的设计模式 - 模板方法模式。 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析...
  • carson_ho
  • carson_ho
  • 2017年02月07日 15:37
  • 4971

Template Method模式和Strategy模式有何异同

Template Method模式和Strategy模式有何异同 博客分类:  设计模式 Java  Template Method模式很容易理解,就是由基类提供一个模板,将各...
  • qing419925094
  • qing419925094
  • 2014年03月27日 23:43
  • 451

js中模板化开发,text/template

JavaScript标签中有时候会看见,大概就是一个放置模板的地方,而这些东西并不显示在页面,我们暂且就把它当成一个容器.百度查了一下也没查到怎么个用法,所以自己就写了一下代码,以便应用这些模板内容。...
  • ThirteenFloor
  • ThirteenFloor
  • 2017年02月14日 13:50
  • 5474

(C++实现)——模板方法模式(Template Method Pattern)

概述:      我们最近在开发一个支持多种压缩类型文件的解压缩且制作成pdf的一个应用。对我们的架构来说我们需要支持多种压缩文件类型,但却有固定的操作顺序(先解压缩,在读取里面的文件分析、制作...
  • u011676589
  • u011676589
  • 2013年09月18日 14:21
  • 1015

Spring MVC之@RequestMapping 详解【重点:指定的地址可以是URI Template 模式】

引言: 前段时间项目中用到了REST风格来开发程序,但是当用POST、PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为applicatio...
  • u011350541
  • u011350541
  • 2017年05月19日 22:23
  • 230

大话设计模式 读书笔记

大话设计模式 读书笔记 着重从c#代码角度分析 学习心得: 学设计模式,不需要是否能立刻理解和记忆,无需着力首先是UML图 再从设计模式到UML图 从UML图到代码 其次知道各种模式的应用场景即可...
  • jiangdmdr
  • jiangdmdr
  • 2017年03月01日 18:50
  • 334

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

设计模式学习笔记——模板(Template)模式@(设计模式)[设计模式, 模板模式, template, 模板方法]设计模式学习笔记模板Template模式 基本介绍 模板案例 类图 实现代码 Ab...
  • q547550831
  • q547550831
  • 2017年03月21日 09:58
  • 799

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

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

TemplateMethod模板方法模式之应用

一,定义:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。            二,类图:  ...
  • liujiahan629629
  • liujiahan629629
  • 2014年02月22日 19:37
  • 2341
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式笔记-Template模式
举报原因:
原因补充:

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