美文网首页设计模式 BY C++C++设计模式
【C++ 设计模式】6.适配器模式

【C++ 设计模式】6.适配器模式

作者: JeremyYv | 来源:发表于2019-10-20 13:38 被阅读0次
    • 适配器模式:一种结构型设计模式

    • 应用场景:
      类A中想要写一个很复杂的新方法,但是该方法已经在类B中实现过了,如果重复写一次,代码量会增加很多而且代码可读性会降低
      举例:
      我国的市电电压是220V,但很多电器正常工作所需的电压是5V。如果为了电器使用而改变市电的电压,工程会变得很大,而且不同的电器所需的电压各不同,配合电器需求而更改市电电压显然是不现实的,所以电器都会配备一个适配器,将市电的220V转换成自己所需的电压
    • 实现方式:
      实现方式有两种。
      第一种,类适配器,使用多继承的方式
      类A继承自类B,即可直接调用类B实现过的方法,无需重复写一次该方法
      第二种,对象适配器,使用组合的方式
      类A中增加一个类B的指针,在类A的新方法中,调用类B中已实现的方法
    • 优点:
      无需重复实现与测试新方法,提高了效率
    • 缺点:
      类适配器模式,由于多继承,可能会出现二义性
      对象适配器模式,如果过多使用适配器模式,会导致代码阅读难度增大

    以下是类适配器模式的简单代码实现
    #include <iostream>
    using namespace std;
    //市电类
    class Electricity
    {
    public:
        virtual void Charge()//使用市电进行充电,输出验证电压的数值
        {
            cout << "220V charging..." << endl;
        }
    };
    
    //适配器类
    class Adapter5V
    {
    public:
        void Transfer()//将电压转换为5V,输出验证
        {
            cout << "5V charging..." << endl;
        }
    };
    
    //类适配器,使用多继承的方式
    class ElecWithAdapter5V:public Electricity, Adapter5V
    {
    public:
        virtual void Charge()//重写充电方法
        {
            Transfer();//直接调用适配器电压转换方法
        }
    };
    
    主函数中的使用
    #include <iostream>
    #include "ClassAdapter.h"
    using namespace std;
    int main()
    {
        Electricity* pEle = new Electricity();//如果不使用适配器
        pEle->Charge();
    
        Electricity* pEleWithAdapter = new ElecWithAdapter5V();//使用适配器
        pEleWithAdapter->Charge();
    
        return 0;
    }
    
    控制台输出结果
    220V charging...
    5V charging...
    

    以下是对象适配器模式的简单代码实现
    #include <iostream>
    using namespace std;
    //市电类
    class Electricity
    {
    public:
        virtual void Charge()//使用市电进行充电,输出验证电压的数值
        {
            cout << "220V charging..." << endl;
        }
    };
    
    //适配器类
    class Adapter5V
    {
    public:
        void Transfer()//将电压转换为5V,输出验证
        {
            cout << "5V charging..." << endl;
        }
    };
    
    //对象适配器
    class ElecWithAdapter5V:public Electricity
    {
    public:
        ElecWithAdapter5V():pAdapter(NULL)
        {
            pAdapter = new Adapter5V();
        }
        virtual void Charge()//重写充电方法
        {
            pAdapter->Transfer();//通过适配器指针,调用电压转换方法
        }
    
    private:
        Adapter5V* pAdapter;
    };
    
    主函数中的使用
    #include <iostream>
    #include "ObjectAdapter.h"
    using namespace std;
    int main()
    {
        Electricity* pEle = new Electricity();//如果不使用适配器
        pEle->Charge();
    
        Electricity* pEleWithAdapter = new ElecWithAdapter5V();//使用适配器
        pEleWithAdapter->Charge();
    
        return 0;
    }
    
    控制台输出结果
    220V charging...
    5V charging...
    

    如有错误,欢迎指正

    相关文章

      网友评论

        本文标题:【C++ 设计模式】6.适配器模式

        本文链接:https://www.haomeiwen.com/subject/tygomctx.html