zoukankan      html  css  js  c++  java
  • 设计模式-Template(行为模式) 采用 继承的方式 将算法封装在抽象基类中,在子类中实现细节。利用面向对象中的多态实现算法实现细节和高层接口的松耦合。

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

    //Template.h

    class AbstractClass
    {
    public:
        virtual ~AbstractClass();
        void TemplateMethod();
    protected:
        virtual void PrimitiveOperation1() = 0;
        virtual void PrimitiveOperation2() = 0;
        AbstractClass();
    private:
    };
    
    class ConcreateClass1 :public AbstractClass
    {
    public:
        ConcreateClass1();
        virtual ~ConcreateClass1();
    protected:
        void PrimitiveOperation1();
        void PrimitiveOperation2();
    private:
    
    };
    
    class ConcreateClass2 :public AbstractClass
    {
    public:
        ConcreateClass2();
        virtual ~ConcreateClass2();
    protected:
        void PrimitiveOperation1();
        void PrimitiveOperation2();
    private:
    };

    //Template.cpp

    #include"Template.h"
    #include<iostream>
    
    AbstractClass::AbstractClass(){}
    AbstractClass::~AbstractClass(){}
    void AbstractClass::TemplateMethod()
    {
        this->PrimitiveOperation1();
        this->PrimitiveOperation2();
    }
    ConcreateClass1::ConcreateClass1(){}
    ConcreateClass1::~ConcreateClass1(){}
    void ConcreateClass1::PrimitiveOperation1()
    {
        std::cout << "ConcreateClass1 ...PrimitiveOperation1" << std::endl;
    }
    void ConcreateClass1::PrimitiveOperation2()
    {
        std::cout << "ConcreateClass1 ... PrimitiveOperation2" << std::endl;
    }
    
    ConcreateClass2::ConcreateClass2(){}
    ConcreateClass2::~ConcreateClass2(){}
    void ConcreateClass2::PrimitiveOperation1()
    {
        std::cout << "ConcreateClass2 ... PrimitiveOperation1" << std::endl;
    }
    
    void ConcreateClass2::PrimitiveOperation2()
    {
        std::cout << "ConcreateClass2 ... PrimitiveOperation2" << std::endl;
    }

    //main.cpp

    #include"Template.h"
    #include<iostream>
    #include<string>
    
    int main(int args, char* argv)
    {
        ConcreateClass1* p1 = new ConcreateClass1();
        ConcreateClass2* p2 = new ConcreateClass2();
        p1->TemplateMethod();
        p2->TemplateMethod();
        getchar();
        return 0;
    }
  • 相关阅读:
    配置中心(Config、Bus)
    链路追踪(Sleuth、Zipkin)
    服务网关(Zuul)
    服务熔断(Hystrix、Turbine)
    服务消费(Ribbon、Feign)
    Win10共享打印机不能用-卸载更新
    vb.net listview 可编辑 ,使用textbox附加实现
    vb.net 使用 ionic.zip 压缩解压缩 文件 文件夹
    Response.End() 与Response.Close()的区别(转载)
    vb6、vbA通过sendmessage postmessage 发送按键、字符到其他程序
  • 原文地址:https://www.cnblogs.com/fourmi/p/12079184.html
Copyright © 2011-2022 走看看