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;
    }
  • 相关阅读:
    Java中怎样由枚举常量的ordinal值获得枚举常量对象
    深入了解泛型
    艰苦的RAW格式数据恢复之旅
    eclipse 代码清理 代码格式化 代码凝视
    应用策略设计模式
    JavaEE SSH集成框架(两) struts2 本地加载dtd文件,action组态
    关闭表空间的热备份实例重新启动重现错误和解决
    CF 148D. Bag of mice (可能性DP)
    C++ Primer 学习笔记_45_STL实践与分析(19)--建筑常规算法
    工作的几点思考
  • 原文地址:https://www.cnblogs.com/fourmi/p/12079184.html
Copyright © 2011-2022 走看看