zoukankan      html  css  js  c++  java
  • 软件工程-Template模式、类适配器、对象适配器的C++实现

    Template模式、类适配器、对象适配器的C++实现

    1、Template:

             

    C++实现代码:

    #include <bits/stdc++.h>
    using namespace std;
    class AbstractClass
    {
    public:
        void TemplateMethod()
        {
            cout<<"PrimitiveOper1() Start"<<endl;
            PrimitiveOper1();
            cout<<"PrimitiveOper1() End"<<endl;
    
            cout<<"PrimitiveOper2() Start"<<endl;
            PrimitiveOper2();
            cout<<"PrimitiveOper2() End"<<endl;
        }
    protected:
        virtual void PrimitiveOper1()
        {
            cout<<"AbstractClass oper1"<<endl;
        }
        virtual void PrimitiveOper2()
        {
            cout<<"AbstractClass oper2"<<endl;
        }
    };
    class ConcreteClass:public AbstractClass
    {
    protected:
        virtual void PrimitiveOper1()
        {
            cout<<"ConcreteClass Oper1"<<endl;
        }
        virtual void PrimitiveOper2()
        {
            cout<<"ConcreteClass Oper2"<<endl;
        }
    };
    int main() {
        AbstractClass * pa=new ConcreteClass();
        pa->TemplateMethod();
        if(pa)
            delete pa;
        return 0;
    }
    View Code

    2、类适配器

            

     C++实现代码:

    #include <bits/stdc++.h>
    using namespace std;
    class Target
    {
    public:
        virtual void Request()
        {
            cout<<"Target::Request"<<endl;
        }
    };
    class Adaptee
    {
    public:
        void SpecificRequest()
        {
            cout<<"Adaptee::SpecificRequest"<<endl;
        }
    };
    class Adapter:public Target,Adaptee
    {
    public:
        void Request()
        {
            Adaptee::SpecificRequest();
        }
    };
    int main() {
        Target *pt=new Adapter();
        pt->Request();
        if(pt)
            delete pt;
        return 0;
    }
    View Code

    3、对象适配器

            

    C++实现代码:

    #include <bits/stdc++.h>
    using namespace std;
    class Target
    {
    public:
        Target(){}
        virtual void Request()
        {
            cout<<"Target::Request"<<endl;
        }
    };
    class Adaptee
    {
    public:
        void SpecificRequest()
        {
            cout<<"Adaptee::SpecificRequest"<<endl;
        }
    };
    class Adapter:public Target,Adaptee
    {
    public:
        Adapter():m_adaptee(new Adaptee){}
        ~Adapter()
        {
           if(m_adaptee!=NULL)
           {
               delete m_adaptee;
           }
        }
        void Request()
        {
            m_adaptee->SpecificRequest();
        }
    private:
        Adaptee *m_adaptee;
    };
    int main() {
        Target *pt=new Adapter();
        pt->Request();
        if(pt)
            delete pt;
        return 0;
    }
    View Code
  • 相关阅读:
    c#爬虫-从内存中释放Selenium chromedriver.exe终极杀
    领域驱动设计-从贫血模型到充血模型
    推荐:.Net 5开源免费的内容管理系统
    Exceptionless服务端本地化部署
    Chrome扩展程序开发
    SqlSugar+SqlServer+NetCore3.1 入门案例
    Linux Qt5 一. 开发环境安装
    Boost Mutex详细解说
    Y7000 2020 安装ubuntu 16.04.3双系统后无法识别无线网卡问题
    《视觉SLAM十四讲》第三讲习题7
  • 原文地址:https://www.cnblogs.com/acmer-hmin/p/12903983.html
Copyright © 2011-2022 走看看