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;
    }
  • 相关阅读:
    Tomatocart中文语言如何安装
    PHP中文乱码
    MySQL性能优化的最佳20+条经验
    linux内核文件IO的系统调用实现分析(open)
    委员联名提案停止评选三好学生 网友评论超2000
    jquery实现增加删除行
    centos 6 挂载 NTFS 分区
    linux 下的PC-lint----splint
    Linux测试软件:从源代码开始
    在Redhat中搭建linux-0.11运行环境
  • 原文地址:https://www.cnblogs.com/fourmi/p/12079184.html
Copyright © 2011-2022 走看看