• 模板模式(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;
    }
    
  • 相关阅读:
    1 外部JavaScript
    1 外部JavaScript
    蓝桥杯:位运算
    Java为什么要配置环境变量
    java数组静态复制和动态复制越界问题
    Dijkstra算法java实现
    离散二元关系实验java实现
    Java中字符串split() 的使用方法
    用java编程实现集合的交、并、差和补运算
    61根据字符出现频率排序(451)
  • 原文地址:https://www.cnblogs.com/s-lisheng/p/11332151.html
Copyright © 2020-2023  润新知