uml和模式应用考试 uml适用于各种软件开发方法

适配器模式概述适配器模式定义:一个类的接口被转换成客户想要的另一个接口。适配器模式允许不兼容的类一起工作。适配器模式充当两个不兼容接口之间的桥梁。这类设计模式属

本文最后更新时间:  2023-03-24 01:23:18

适配器模式概述

适配器模式定义:一个类的接口被转换成客户想要的另一个接口。适配器模式允许不兼容的类一起工作。适配器模式充当两个不兼容接口之间的桥梁。这类设计模式属于结构化模式,兼容多个独立接口的功能。生活中用电电压是220V,但是电脑、手机、led等设备都不用高压,所以都需要一个电源适配器将220V转换成相应的低压。其中电源适配器充当适配器。

适配器模式结构

适配器模式结构包含以下角色:

适配器类(Adapter):适配器与适配者之间是继承或实现关系。适配者类(Adaptee):适配器与适配者之间是关联关系。目标抽象类(Target):定义客户所需要的接口。

模式适配器的UML类图如下:

模式的应用实例

用适配器模式模拟新能源汽车发动机。汽车发动机包括电动马达和光学马达等。各种发动机的驱动方式不同。比如电动机的ElectricDrive()是电能驱动,而光学电动机的OpticalDrive()是光能驱动。它们是适配器模式下的访问适配器。

客户端希望用统一的引擎驱动方法drive()来访问这两个引擎,所以需要定义一个统一的目标接口电机,然后定义一个电适配器和一个光适配器来适配这两个引擎。

代码:

// 适配器模式.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;}

适配器模式的优点和缺点

优势

更好的复用性:系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。透明、简单:客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单 & 更直接更好的扩展性:在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。解耦性:将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码符合开放-关闭原则:同一个适配器可以把适配者类和它的子类都适配到目标接口;可以为不同的目标接口实现不同的适配器,而不需要修改待适配类

缺点

过多地使用适配器,会让系统非常零乱,不易整体进行把握。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。