zoukankan      html  css  js  c++  java
  • 设计模式-Adapter(结构型模式)针对第三方库 函数 接口不匹配的问题,分为类模式 与 对象模式 两种

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

    //****************************类模式的Adaptr********************************

    //Adapter.h

    #pragma once
    class Target
    {
    public:
        Target();
        virtual ~Target();
        virtual void Request();
    protected:
    private:
    };
    
    class Adaptee
    {
    public:
        Adaptee();
        virtual ~Adaptee();
        void SpecificRequest();
    protected:
    private:
    };
    
    class Adapter :public Target, private Adaptee
    {
    public:
        Adapter();
        ~Adapter();
        void Request();
    protected:
    private:
    };

    //Adapter.cpp

    #include"Adapter.h"
    #include<iostream>
    
    Target::Target(){}
    Target::~Target(){}
    void Target::Request()
    {
        std::cout << "Target Request!!" << std::endl;
    }
    
    Adapter::Adapter(){}
    Adapter::~Adapter(){}
    void Adapter::Request()
    {
        this->SpecificRequest();
    }
    
    Adaptee::Adaptee(){}
    Adaptee::~Adaptee(){}
    void Adaptee::SpecificRequest()
    {
        std::cout << "Specific Request!!" << std::endl;
    }

    //main.cpp

    #include"Adapter.h"
    #include<iostream>
    #include<string>
    int main(int args, char* argv)
    {
        Target* adt = new Adapter();
        adt->Request();
        getchar();
        return 0;
    }

    //****************************对象模式的Adaptr********************************

    //Adapter.h

    #pragma once
    
    class Target
    {
    public:
        Target();
        virtual ~Target();
        virtual void Request();
    protected:
    private:
    };
    
    class Adaptee
    {
    public:
        Adaptee();
        virtual ~Adaptee();
        void SpecificRequest();
    protected:
    private:
    };
    
    class Adapter :public Target
    {
    public:
        Adapter(Adaptee* adt);
        virtual ~Adapter();
        virtual void Request();
    protected:
    private:
        Adaptee* _ade;
    };

    //Adapter.cpp

    #include"Adapter.h"
    #include<iostream>
    
    Target::Target(){}
    Target::~Target(){}
    void Target::Request()
    {
        std::cout << "Target Request!!" << std::endl;
    }
    
    Adaptee::Adaptee(){}
    Adaptee::~Adaptee(){}
    void Adaptee::SpecificRequest()
    {
        std::cout << "Specific Request!!" << std::endl;
    }
    
    Adapter::Adapter(Adaptee* ade)
    {
        this->_ade = ade;
    }
    Adapter::~Adapter(){}
    void Adapter::Request()
    {
        _ade->SpecificRequest();
    }

    //main.cpp

    #include"Adapter.h"
    #include<iostream>
    #include<string>
    
    int main(int args, char* argv)
    {
        Adaptee* ade = new Adaptee;
        Target* adt = new Adapter(ade);
        adt->Request();
        getchar();
        return 0;
    }
  • 相关阅读:
    IaaS、PaaS、SaaS
    hyper-V 配置
    解决linux下创建用户时出现Creating mailbox file: File exists
    iframe层级关系调用
    js,jq新增元素 ,on绑定事件无效
    js中!和!!的区别与用法
    form表单禁止button 提交
    Thinkphp5终端创建控制器和模型
    TP5的目录常量和路径
    sublime安装package controlller
  • 原文地址:https://www.cnblogs.com/fourmi/p/12077039.html
Copyright © 2011-2022 走看看