模板方法(Template Method)
前言:好久没写博客了,也不知道自己每天都在忙些什么,眼睛一睁一闭,一天就结束了。空留一声叹息!
本学期开设了设计模式这门课,想趁着这个机会好好学习一番。
关于学习:我感觉就比如这模板方法模式,我们可以从字面意思就可以略知一二。所谓模板,可以这样理解:
可以将一些共有的特征或行为抽象化,用一个抽象的特征或行为来表示。
学习方法:在此之前,由内容→题目;(先学习内容,然后回来体会题目的意思)
在此之后,由题目→内容;(先分析题目,然后理解内容)
有种从整体到局部的意思,嘎嘎,个人体会,无需在意。
Template Method定义:
定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟 (变化)到子类中。Template Method使得子类可以不改变 (复用)一个算法的结构即可重定义(override 重写)该算法的 某些特定步骤。
——《设计模式》GoF
这句话有点难懂,其实用我的话翻译过来:
首先把类内的方法分为稳定的和变化的。
稳定:随着后期的开发,方法不会随之改变;
变化:随着项目的开发,方法根据需求不断变更;
模板方法模式是通过把稳定的行为搬移到基类,把变化的行为放到子类中;
用一个例子来说明:
1.定义一个程序库开发类;
2.定义两个应用程序开发类;
3.两个应用程序开发类都需要一个run()的方法,且需求是一样的;
4.在程序库开发类中,将run()方法框架搭好,里面的实现细节交给应用程序开发类;
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;
}