C++设计模式:模板方法(Template Method)

模板方法(Template Method)

前言:好久没写博客了,也不知道自己每天都在忙些什么,眼睛一睁一闭,一天就结束了。空留一声叹息!
  本学期开设了设计模式这门课,想趁着这个机会好好学习一番。
关于学习:我感觉就比如这模板方法模式,我们可以从字面意思就可以略知一二。所谓模板,可以这样理解:
  可以将一些共有的特征或行为抽象化,用一个抽象的特征或行为来表示。
学习方法:在此之前,由内容→题目;(先学习内容,然后回来体会题目的意思)
 在此之后,由题目→内容;(先分析题目,然后理解内容)
 有种从整体到局部的意思,嘎嘎,个人体会,无需在意。


Template Method定义:
定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟 (变化)到子类中。Template Method使得子类可以不改变 (复用)一个算法的结构即可重定义(override 重写)该算法的 某些特定步骤。
 ——《设计模式》GoF

这句话有点难懂,其实用我的话翻译过来:
首先把类内的方法分为稳定的和变化的
稳定:随着后期的开发,方法不会随之改变;
变化:随着项目的开发,方法根据需求不断变更;
模板方法模式是通过把稳定的行为搬移到基类,把变化的行为放到子类中

用一个例子来说明:
1.定义一个程序库开发类;
2.定义两个应用程序开发类;
3.两个应用程序开发类都需要一个run()的方法,且需求是一样的;
4.在程序库开发类中,将run()方法框架搭好,里面的实现细节交给应用程序开发类;

.h文件
#pragma once
#include <iostream>
using namespace std;
//抽象模板,定义一个模板方法
//定义一个程序库开发人员
class Library
{
public:

	//具体的模板方法,给出了逻辑的框架,
	//逻辑的组成是一些相应的抽象操作,它们都在子类中实现
	void run();
	
	virtual ~Library(){ }	
protected:
	Library();
	
	//一些抽象行为,由子类实现
	virtual void step1() = 0;
	virtual void step2() = 0;
};



class Application1 : public Library
{
public:
	Application1(){}
	~Application1(){}
protected:
	virtual void step1();
	virtual void step2();
};


class Application2 : public Library
{
public:
	Application2(){}
	~Application2(){}
protected:
	void step1();

	void step2();
};

.cpp文件
#include "TemplateMethod.h"

Library::Library()
{}

void Library::run()
{
	step1();
	step2();
}


void Application1::step1()
{
	cout<< "执行Application1的step1"<< endl;
}
void Application1::step2()
{
	cout<< "执行Application1的step2"<< endl;
}


void Application2::step1()
{
	cout<< "执行Application2的step1"<< endl;
}
void Application2::step2()
{
	cout<< "执行Application2的step2"<< endl;
}

main文件
#include "TemplateMethod.h"

int main()
{
	Library* pLibrary = new Application1();
	pLibrary->run();

	pLibrary = new Application2();
	pLibrary->run();

	delete pLibrary;
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值