美文网首页设计模式 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...

如有错误,欢迎指正

相关文章

  • Java(八):设计模式

    九、设计模式 6.适配器模式是什么?什么时候使用? 适配器模式(Adapter Pattern)是作为两个不兼容的...

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

    适配器模式:一种结构型设计模式 应用场景:类A中想要写一个很复杂的新方法,但是该方法已经在类B中实现过了,如果重复...

  • 简说设计模式之适配器模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是适配器模式 适配器模式(Adapter...

  • c#面向对象10--简单工厂设计模式

    23种设计模式 1.单例模式2.抽象工厂模式3.工厂方法模式4.建造者模式5.原型模式6.适配器模式7.装饰器模式...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 最常用的设计模式---适配器模式(C++实现)

    适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适...

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(4)抽象工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

网友评论

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

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