zoukankan      html  css  js  c++  java
  • 适配器模式

    定义

    适配器模式是将一个类的接口转换为客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。它包括类适配器和对象适配器。

    场景

    系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。

    想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式。比如购买的第三方开发组件,该组件接口与我们自己系统的接口不相同,或者由于某种原因无法直接调用该组件,可以考虑适配器。

    UML

    类适配器

    #include <iostream>
    
    class IInterface
    {
    public:
        IInterface() {}
        virtual ~IInterface() {}
        void commonRequest()
        {
            std::cout << "the third party interface" << '
    ';
        }
    };
    
    class IAdapter
    {
    public:
        IAdapter() {}
        virtual ~IAdapter() {}
        
        virtual void Request() = 0;
    };
    
    class CAdapter : private IInterface, public IAdapter
    {
    public:
        CAdapter() {}
        ~CAdapter() {}
        
        void Request()
        {
            std::cout << "invoke third party interface" << '
    ';
            commonRequest();
            std::cout << "----------------------------" << '
    ';
        }
    };
    
    int main()
    {
        IAdapter *p = new CAdapter();
    
        p->Request();
    
        delete p;
    
        return 0;
    }

    对象适配器

    #include <iostream>
    
    class IInterface
    {
    public:
        IInterface() {}
        virtual ~IInterface() {}
        void commonRequest()
        {
            std::cout << "the third party interface" << '
    ';
        }
    };
    
    class IAdapter
    {
    public:
        IAdapter() {}
        virtual ~IAdapter() {}
        
        virtual void Request() = 0;
    };
    
    class CAdapter : public IAdapter
    {
    public:
        CAdapter(IInterface *interface) : m_interface(interface) {}
        CAdapter()
        {
            m_interface = new IInterface();
        }
        ~CAdapter() {}
        
        void Request()
        {
            std::cout << "invoke third party interface" << '
    ';
            m_interface->commonRequest();
            std::cout << "----------------------------" << '
    ';
        }
    
    private:
        IInterface *m_interface;
    };
    
    int main()
    {
        IAdapter *p = new CAdapter();
    
        p->Request();
    
        delete p;
    
        return 0;
    }
  • 相关阅读:
    mac 下安装jenkins
    Appium元素定位难点:tap坐标定位不准确
    Appium元素定位难点:混合式的native+webview
    Linux 上安装 appium
    springMVC之AOP
    设计模式之装饰模式
    设计模式之桥接模式
    MyBatis特殊字符转义
    python+urllib+beautifulSoup实现一个简单的爬虫
    设计模式之代理模式
  • 原文地址:https://www.cnblogs.com/zuofaqi/p/10471557.html
Copyright © 2011-2022 走看看