当前位置:首页 > 生活百科

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

栏目:生活百科日期:2024-12-14浏览:0

适配器模式概述

适配器模式(Adapter Pattern)定义:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些不兼容的类可以一起工作。适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,兼容多个独立接口的功能。在生活中用电电压是220V,但是电脑、手机、LED等设备不会使用高电压,因此都需要电源适配器将220V转换成对应的低电压。其中电源适配器就充当一个适配器的角色。

适配器模式结构

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

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

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

适配器模式优缺点

优点

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

缺点

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

“uml和模式应用考试(uml适用于各种软件开发方法)” 的相关文章

cad迅捷转换器怎么用(pdf图纸转换成cad图纸软件方法)

一个方法就够了,轻松教你玩转AutoCAD之间的转换操作,批量转换CAD为PDF、JPG,CAD版本转换操作,再不用因为格式问题为难,具体要怎么进行操作呢?这里...

gprs是什么意思如何关闭(手机出现gprs恢复方法)

什么是无线透传?GPRS是什么,有什么作用?433M于zigbee自组网模块是什么?在工业数传领域,许多人可能不理解或者如何区分这些概念,今天就和成都亿佰特电子...

wps文件打不开怎么办,其原因及解决方法

WPS是金山软件开发的一款办公软件WPS的word格式是*.wps如下图所示为.WPS格式office是微软开发的办公软件,以前一直很流行,但是最近几年WPS的...

免费的ftp工具绿色版软件(安卓上好用的ftp工具)

说明:很多时候我们用SSH登录vps后用vi命令编辑文件的时候,都不知道怎么编辑,这时候就只能借助FTP文件管理软件来手动编辑了,而且还可以直接从本地上传图片,...

怎么在淘宝上领优惠券,淘宝优惠券领取地址

相信很多朋友都有网上购物的体验,网上购物对于传统的线下交易来说有着莫大的优势,那就是可以足不出门就可以挑选各种自己想要的商品,而且还可以对比它们之间的价格,线上...

如何把多个pdf合成一个pdf(文件合并的操作步骤)

有时候一篇PDF文档会被分成多个部分,如果想要将这些文档合并成一个PDF文件的话该怎样操作,下面就来教你怎么通过pdf编辑器将两个pdf文件合并成为一个pdf文...

office2018激活密钥最新(office2018版本对应的版本号)

很多Win10电脑都预装的有Office365办公软件(激活以后可能显示为Office2016/2019),或者你后来自行订阅了Office365。那么有些朋友...

26键盘拼音打字口诀,0基础自学拼音打字的技巧

下午好呢?今天也是努力的自己鸭^–^今天带来的是:1.盲打口诀2.报名照片如何修改大小3.标点符号希望你们喜欢?寒假计算机二级走起~如果二级方面有不懂的也可以留...

小米mix2上市时间及价格(小米mix2s详细参数)

今天10点,小米公司宣布了一个重磅消息,跟之前预测的基本一致,小米MIX2来了,而且是赶在iPhone8之前。小米官方给出的公告显示,9月11日将在北京工业大学...

工作进度表怎么做,只需六步让你的工作情况一目了然

记得几年前第一次做项目统计时候,老板让我列一个项目时间表;我试过了很多表格,最后我选择了利用甘特图来制作项目时间表;因为它不仅美观偏亮,而且可以很直观的表明任务...