模板模式

模板模式是一种设计模式,它在基类中定义了算法的骨架,子类只需实现具体步骤即可。这种模式适用于有相同结构逻辑但细节不同的场景,遵循开闭原则,便于代码维护。然而,它可能导致子类过多。要使用模板模式,首先创建模板类,确定执行顺序,然后根据需求创建子类并实现相应函数。

模板模式

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

 

AbstractClass:这个就是模板类,里面提供了一个外部调用接口,让你能够运行这个模板,而这个接口是将需要的结构流程制定好,比如图中的TemplateMethod就是模板方法接口,而内部就是将1、2两个函数用特定的流程进行执行,完成需要完成的任务

ConcreteClass:具体实现类,不提供外部接口函数,只需要按照自己的实际需要去实现1、2函数的具体实现就行了

(鄙人关于设计模式相关文章涉及到的模式解释通图,全部来自于《大话设计模式》,局限于图。侵删)

使用场景:

  • 需要派生多个子类的共同方法,并且运行的结构逻辑相同
  • 过于复杂、重要的方法

优点:

  • 开发封闭原则的支持
  • 代码易维护
  • 子类只负责实现步骤实操,整体运行结构在父类

缺点:

  • 一个函数不同就是一个子类,容易造成子类过多

实操

 

一开始其实很难理解模板模式,因为类模板已经在心里已经先入为主了,以为模板模式就是模板类,但是自己开发了后才知道是“不只是”,值得反而是一类问题,只不过模板把使用简化了,一个<>就创建了一个子类,而且感觉只是类似,毕竟模板类只是复制了相同的类,而不是派生了子类。

 

思路:

  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();
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值