模板模式(Template Pattern)

Posted s-lisheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板模式(Template Pattern)相关的知识,希望对你有一定的参考价值。

模板模式(Template Pattern) —— 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template 提供了这种情况的一个实现框架。

Template模式是采用继承的方式实现:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。

#include<iostream>
using namespace std;

//抽象类 实现总的通用算法框架,算法细节交给子类实现
class Abstact 
public:
    virtual ~Abstact()
    // 将不变的部分(通用的算法框架)在抽象类中实现,而将变化的部分(算法细节)抽象出来交给子类实现。
    void TemplateMethod()
        cout<<"TemplateMethod:"<<endl;
        this->PrimitiveOperation1();
        this->PrimitiveOperation2();
    
protected:
    virtual void PrimitiveOperation1()=0;
    virtual void PrimitiveOperation2()=0;
    Abstact()
;

//子类A,实现自己的算法细节
class ConcreteA: public Abstact
public:
    ConcreteA()
    ~ConcreteA()
protected:
    void PrimitiveOperation1()
        cout<<"A ---> PrimitiveOperation1:"<<endl;
    

    void PrimitiveOperation2()
        cout<<"A ---> PrimitiveOperation2:"<<endl;
    
;

//子类B,实现自己的算法细节
class ConcreteB: public Abstact
public:
    ConcreteB()
    ~ConcreteB()
protected:
    void PrimitiveOperation1()
        cout<<"B ---> PrimitiveOperation1:"<<endl;
    

    void PrimitiveOperation2()
        cout<<"B ---> PrimitiveOperation2:"<<endl;
    
;

int main()
    cout<< "template pattern."<<endl;
    Abstact* a = new ConcreteA();
    a->TemplateMethod();
    Abstact* b = new ConcreteB();
    b->TemplateMethod();

    delete a;
    delete b;

    return 0;

以上是关于模板模式(Template Pattern)的主要内容,如果未能解决你的问题,请参考以下文章

模板方法模式(Template Pattern)

模板模式(Template Pattern)

设计模式 - 模板方法模式(template method pattern) Applet 具体解释

模板方法(template pattern)

模板模式(Template Pattern)

模板方法模式---Template Method Pattern