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;
    }
  • 相关阅读:
    产品小细节中的大体验
    产品经理的四点思考:不该简单满足用户需求
    产品经理的十大顶级错误
    SQL Server数据库大型应用解决方案总结
    java中public static void main(String[] args)中String[] args代表什么意思?
    异常处理1
    java中的String
    华为2013年西安java机试题目:如何过滤掉数组中的非法字符。
    2用java代码实现冒泡排序算法(转载)
    1用java实现冒泡排序算法以及解决的几个小问题。
  • 原文地址:https://www.cnblogs.com/zuofaqi/p/10471557.html
Copyright © 2011-2022 走看看