文章插图
文章插图
适配器模式概述
适配器模式(Adapter Pattern)定义:将一个类的接口转换成客户希望的另一个接口 。适配器模式让那些不兼容的类可以一起工作 。适配器模式是作为两个不兼容的接口之间的桥梁 。这种类型的设计模式属于结构型模式 , 兼容多个独立接口的功能 。在生活中用电电压是220V , 但是电脑、手机、LED等设备不会使用高电压 , 因此都需要电源适配器将220V转换成对应的低电压 。其中电源适配器就充当一个适配器的角色 。
适配器模式结构
适配器模式结构包含以下几个角色:
适配器类(Adapter):适配器与适配者之间是继承或实现关系 。适配者类(Adaptee):适配器与适配者之间是关联关系 。目标抽象类(Target):定义客户所需要的接口 。
适配器模式UML类图如下:
模式的应用实例
用适配器模式(Adapter)模拟新能源汽车的发动机 。能源汽车的发动机有电能发动机(Electric Motor)和光能发动机(Optical Motor)等 , 各种发动机的驱动方法不同 , 例如 , 电能发动机的驱动方法 ElectricDrive() 是用电能驱动 , 而光能发动机的驱动方法 OpticalDrive() 是用光能驱动 , 它们是适配器模式中被访问的适配者 。
客户端希望用统一的发动机驱动方法 drive() 访问这两种发动机 , 所以必须定义一个统一的目标接口 Motor , 然后再定义电能适配器(Electric Adapter)和光能适配器(Optical Adapter)去适配这两种发动机 。
【UML考试 uml考试试题】代码:
// 适配器模式.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;}
适配器模式优缺点优点
更好的复用性:系统需要使用现有的类 , 而此类的接口不符合系统的需要 。那么通过适配器模式就可以让这些功能得到更好的复用 。透明、简单:客户端可以调用同一接口 , 因而对客户端来说是透明的 。这样做更简单 & 更直接更好的扩展性:在实现适配器功能的时候 , 可以调用自己开发的功能 , 从而自然地扩展系统的功能 。解耦性:将目标类和适配者类解耦 , 通过引入一个适配器类重用现有的适配者类 , 而无需修改原有代码符合开放-关闭原则:同一个适配器可以把适配者类和它的子类都适配到目标接口;可以为不同的目标接口实现不同的适配器 , 而不需要修改待适配类
缺点
过多地使用适配器 , 会让系统非常零乱 , 不易整体进行把握 。
- 考试系统属于什么软件 考试软件哪个好用
- 阿里巴巴java认证考试 阿里巴巴java开发规范
- 2021高考试题理综 2021高考试题
- 2021高考试卷答案公布时间 2021高考试卷答案
- 2021高考试卷语文 2021高考试卷
- 英语口语考试怎么过 英语口语考试如何准备
- 大学英语四级考试技巧与方法 大学四级英语口语考试怎么考
- 英语口语考试怎么练最有效 提高英语口语的最有效的方法
- 英语口语考试中的日常交际用语 英语口语交际常用句子
- 上海口语考试技巧 上海英语口试技巧