码迷,mamicode.com
首页 > 其他好文 > 详细

模板模式(Template Pattern)

时间:2019-08-10 16:59:55      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:name   iostream   prot   对象   过程   模式   cout   pat   不同   

模板模式(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)

标签:name   iostream   prot   对象   过程   模式   cout   pat   不同   

原文地址:https://www.cnblogs.com/s-lisheng/p/11332151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!