Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说C++设计模式——适配器模式,希望能够帮助你!!!。
适配器模式(Adapter Pattern)定义:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些不兼容的类可以一起工作。适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,兼容多个独立接口的功能。在生活中用电电压是220V,但是电脑、手机、LED等设备不会使用高电压,因此都需要电源适配器将220V转换成对应的低电压。其中电源适配器就充当一个适配器的角色。
适配器模式结构包含以下几个角色:
适配器模式UML类图如下:
用适配器模式(Adapter)模拟新能源汽车的发动机。能源汽车的发动机有电能发动机(Electric Motor)和光能发动机(Optical Motor)等,各种发动机的驱动方法不同,例如,电能发动机的驱动方法 ElectricDrive() 是用电能驱动,而光能发动机的驱动方法 OpticalDrive() 是用光能驱动,它们是适配器模式中被访问的适配者。
客户端希望用统一的发动机驱动方法 drive() 访问这两种发动机,所以必须定义一个统一的目标接口 Motor,然后再定义电能适配器(Electric Adapter)和光能适配器(Optical Adapter)去适配这两种发动机。
代码:
// 适配器模式.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
typedef enum
{
ELECTRIC = 0,
OPTICAL
}ADAPTER_TYPE;
//电机基类
class Adapter
{
public:
Adapter() = default;
virtual ~Adapter() = default;
virtual void Driver() = 0;
};
//电能发动机
class ElectricMotor
{
public:
ElectricMotor() = default;
~ElectricMotor() = default;
void ElectricDrive() { cout << "电能发动机驱动汽车" << endl; }
};
//光能发动机
class OpticalMotor
{
public:
OpticalMotor() = default;
~OpticalMotor() = default;
void OpticalDriver() { cout << "光能发动机驱动汽车" << endl; }
};
class ElectricAdapter : public Adapter
{
public:
ElectricAdapter()
{
pMotor = new ElectricMotor();
}
~ElectricAdapter()
{
if (pMotor)
{
delete pMotor;
pMotor = nullptr;
}
}
void Driver()
{
pMotor->ElectricDrive();
}
private:
ElectricMotor* pMotor;
};
class OpticalAdapter : public Adapter
{
public:
OpticalAdapter()
{
pMotor = new OpticalMotor();
}
~OpticalAdapter()
{
if (pMotor)
{
delete pMotor;
pMotor = nullptr;
}
}
void Driver()
{
pMotor->OpticalDriver();
}
private:
OpticalMotor* pMotor;
};
class AdapterFactory
{
public:
static Adapter* CreateAdapter(ADAPTER_TYPE type)
{
switch (type)
{
case ADAPTER_TYPE::ELECTRIC:
return new ElectricAdapter();
case ADAPTER_TYPE::OPTICAL:
return new OpticalAdapter();
default:
return nullptr;
}
}
};
int main()
{
Adapter* pAdapter = nullptr;
pAdapter = AdapterFactory::CreateAdapter(ELECTRIC);
pAdapter->Driver();
delete pAdapter;
pAdapter = AdapterFactory::CreateAdapter(OPTICAL);
pAdapter->Driver();
delete pAdapter;
return 0;
}
优点
缺点
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章