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;
    }
  • 相关阅读:
    GuozhongCrawler系列教程 (1) 三大PageDownloader
    数据库中表的复杂查询&amp;分页
    AngularJs 在控制器中过滤
    【iOS开发-79】利用Modal方式实现控制器之间的跳转
    leetCode(51):Valid Palindrome
    Eclipse上开发IBM Bluemix应用程序
    POJ 2104 K-th Number 静态主席树(裸
    BZOJ 3210 花神的浇花集会 计算几何- -?
    [易飞]一张领料单单身仓库&quot;飞了&quot;引起的思考
    Hbuilder开发app实战-识岁06-face++的js实现【完结】
  • 原文地址:https://www.cnblogs.com/fourmi/p/12079184.html
Copyright © 2011-2022 走看看