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;
    }
  • 相关阅读:
    【URL重写】IIS7配置URL重写
    【IIS7.5】Asp文件上传限制,加载页面大小限制
    msxml3.dll 错误 '800c0005' 系统错误: -2146697211。
    【转】修改3389远程端口的批处理文件.bat
    第一篇:无角牛MVC通用后台数据库设计
    无角牛MVC通用后台
    个人收集资料整理-WebForm
    个人收集资料整理-WinForm
    win7系统中桌面图标显示不正常问题
    ASP.NET MVC 第六回 过滤器Filter
  • 原文地址:https://www.cnblogs.com/fourmi/p/12077039.html
Copyright © 2011-2022 走看看