模板模式
模板就是可以用来解决大部分问题的东西,你可能只需要修改一些细节就可以完成任务。就和你需要写各种文档一样,一把都会先弄到一份模板,而模板是什么了,就是表明了1、2、3、4...和怎么写的东西,这就是模板,对于一类问题制定了一个解决大部分问题的结构顺序和所需内容,只需要补上自己的东西就行了。而模板模式就是在基类种定义了一个算法的运行骨架,然后子类去重构和具体实现那些方法就行了。

AbstractClass:这个就是模板类,里面提供了一个外部调用接口,让你能够运行这个模板,而这个接口是将需要的结构流程制定好,比如图中的TemplateMethod就是模板方法接口,而内部就是将1、2两个函数用特定的流程进行执行,完成需要完成的任务
ConcreteClass:具体实现类,不提供外部接口函数,只需要按照自己的实际需要去实现1、2函数的具体实现就行了
(鄙人关于设计模式相关文章涉及到的模式解释通图,全部来自于《大话设计模式》,局限于图。侵删)
使用场景:
- 需要派生多个子类的共同方法,并且运行的结构逻辑相同
- 过于复杂、重要的方法
优点:
- 开发封闭原则的支持
- 代码易维护
- 子类只负责实现步骤实操,整体运行结构在父类
缺点:
- 一个函数不同就是一个子类,容易造成子类过多
实操

一开始其实很难理解模板模式,因为类模板已经在心里已经先入为主了,以为模板模式就是模板类,但是自己开发了后才知道是“不只是”,值得反而是一类问题,只不过模板把使用简化了,一个<>就创建了一个子类,而且感觉只是类似,毕竟模板类只是复制了相同的类,而不是派生了子类。
思路:
- 先写模板类,写一个外部调用的结构,里面实现制定函数的执行顺序
- 实现每个需求的子类,去具体实现每个函数的需求
// TemplateModel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
//模板简单而言就是固定流程,然后你修改不同的部分去满足你的需求或者去阐述你的需求
class CTemplate
{
public:
virtual void toOpen() {}
virtual void toPutDown() {}
virtual void toClose() {}
void templateMethod()
{
toOpen();
toPutDown();
toClose();
}
};
class CToHome:public CTemplate
{
public:
void toOpen() { cout << "打开家门。" << endl; }
void toPutDown() { cout << "放下东西。" << endl; }
void toClose() { cout << "关闭家门。" << endl; }
};
class CToRefrigerator:public CTemplate
{
public:
void toOpen() { cout << "打开冰箱门。" << endl; }
void toPutDown() { cout << "放下东西。" << endl; }
void toClose() { cout << "关闭冰箱门。" << endl; }
};
int main()
{
CTemplate* temp1 = new CToHome;
temp1->templateMethod();
cout << "===========================" << endl;
CTemplate* temp2 = new CToRefrigerator;
temp2->templateMethod();
}
模板模式是一种设计模式,它在基类中定义了算法的骨架,子类只需实现具体步骤即可。这种模式适用于有相同结构逻辑但细节不同的场景,遵循开闭原则,便于代码维护。然而,它可能导致子类过多。要使用模板模式,首先创建模板类,确定执行顺序,然后根据需求创建子类并实现相应函数。
209

被折叠的 条评论
为什么被折叠?



