概念
模版模式是设计模式行为模式的一种,它的核心思想是定义一个算法骨架,将某些步骤提取到到子类中实现。解决当项目中出现多个处理分支,这几个处理分支有重复步骤的时实现代码的复用和扩展。在这种模式下不用修改逻辑结构,使用继承机制中的子类来实现算法不同部分的处理逻辑。
适用场景
1、固定流程,可变步骤:当只向客户端定义一个特定的算法步骤的时候,方便子类能对其进行扩展,同时保证算法结构不变,可使用此算法。
2、代码复用:当多个类的算法除了一些细微的不同,其他处理逻辑一样的时候,为了去除重复代码就可以使用此模式将不同之处在子类中实现。
创建方式
1、分析当前业务逻辑,梳理出算法中的重复逻辑和不同逻辑,并将其抽出到一个类(超类)中。在此类中创建一个函数实现算法的处理步骤。将需要继承在子类中代码函数设置为虚函数。
2、实现所有需要单独处理的子类,并继承超类。在子类中实现需要单独处理的算法逻辑(实现在超类的虚函数上)。
3、完成以上步骤之后在客户端创需要执行的算法类,并调用超类中的算法接口即可完成。
类关系图

示例代码
cpp
#include "MoBanMoShi.h"
int main()
{
std::cout << "欢迎东哥来到设计模式的世界!\n";
Manner1* manner1 = new Manner1();
manner1->algorithm();
cout << "==========================" << endl;
Manner2* manner2 = new Manner2();
manner2->algorithm();
}
cpp
#pragma once
#include <iostream>
#include <string>
using namespace std;
//超类
class MainInterface
{
public:
MainInterface() { }
~MainInterface() {}
void algorithm() {
step1();
step2();
step3();
step4();
}
void step1() {
cout << "步骤1:通用步骤" << endl;
}
virtual void step2() {}
virtual void step3() {}
void step4() {
cout << "步骤4:通用步骤" << endl;
}
};
//具体算法步骤实现
class Manner1 : public MainInterface {
public:
Manner1() {}
~Manner1() {}
void step2() {
cout << "步骤2:Manner1 步骤" << endl;
}
void step3() {
cout << "步骤3:Manner1 步骤" << endl;
}
};
//具体算法步骤实现
class Manner2 : public MainInterface {
public:
Manner2() {}
~Manner2() {}
void step2() {
cout << "步骤2:Manner2 步骤" << endl;
}
void step3() {
cout << "步骤3:Manner2 步骤" << endl;
}
};
cpp
欢迎东哥来到设计模式的世界!
步骤1:通用步骤
步骤2:Manner1 步骤
步骤3:Manner1 步骤
步骤4:通用步骤
==========================
步骤1:通用步骤
步骤2:Manner2 步骤
步骤3:Manner2 步骤
步骤4:通用步骤