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

适配器模式概述

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

适配器模式结构

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

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

适配器模式UML类图如下:

C++设计模式——适配器模式

模式的应用实例

用适配器模式(Adapter)模拟新能源汽车的发动机。能源汽车的发动机有电能发动机(Electric Motor)和光能发动机(Optical Motor)等,各种发动机的驱动方法不同,例如,电能发动机的驱动方法 ElectricDrive() 是用电能驱动,而光能发动机的驱动方法 OpticalDrive() 是用光能驱动,它们是适配器模式中被访问的适配者。

客户端希望用统一的发动机驱动方法 drive() 访问这两种发动机,所以必须定义一个统一的目标接口 Motor,然后再定义电能适配器(Electric Adapter)和光能适配器(Optical Adapter)去适配这两种发动机。

C++设计模式——适配器模式

代码:

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

适配器模式优缺点

优点

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

缺点

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

版权声明:本文图片和内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送联系客服 举报,一经查实,本站将立刻删除,请注明出处:https://www.4kpp.com/7744.html

(0)
漫空客漫空客
上一篇 2023年4月23日
下一篇 2023年4月23日

相关推荐

  • 微信在吗什么梗?微信朋友圈在吗怎么弄[多图]

    微信朋友圈在吗什么梗?微信朋友圈在吗怎么弄?近期我们在朋友圈中会发现很多人都在发“在吗”的文案,很多用户不清楚这是什么意思,应该怎么弄,其实这是支付宝的一个情人节彩蛋玩法,很多用户…

    2023年4月22日
    1320
  • 放量上涨意味着什么(放量下跌意味着什么意思)

    今天我想和大家分享一下关于增加音量是什么意思(减少音量是什么意思)的问题。以下是这个问题的总结。让我们来看看。 增加音量是什么意思? 股市暴涨,股价暴涨,成交量上涨意味着什么?对于…

    投稿 2023年4月23日
    910
  • 逆天小学题(逆天小学题答案)

    今天给大家分享一下逆天小学题的知识,也给大家讲解一下逆天小学题的答案。如果你碰巧解决了你现在面临的问题,别忘了关注这个网站,现在就开始! 这四道小学题很难,大学生还在“哭”。你会回…

    投稿 2023年4月23日
    950
  • 警告的近义词(警告的近义词和反义词)

    今天小编给各位分享警告的近义词(警告的近义词和反义词),如果能碰巧解决你现在面临的问题,别忘了关注小站,我们一起开始吧! 紧张、鼓励、警告、倾听、反思、指示、区分和简单地成为同义词…

    投稿 2023年4月23日
    1120
  • 天猫年中大促时间(天猫年中大促是什么时候)

    5月26日晚8时开始,天猫618预售即将开始。 26日上午,记者从天猫方面获悉,继跨店满减“满300 减 50”的强力折扣力度外,88VIP大额消费券晚9点正式来袭,开启兑换。此次…

    2023年4月20日
    930
  • 光遇4.21每日任务攻略

    光遇4.21日任务是什么?需要怎么做?这次的任务需要去墓土和霞谷,在在墓土地图冥想霞谷地图追逐星光,还有收集烛光,最后一个任务是向另外一位玩家送心哦。 以上就是光遇4.21每日任务…

    2023年4月23日
    840
  • 数据库设计规范(数据库设计三大规范)

    数据库设计规范(数据库设计三大规范)原创波波说运维2019-10-12 00:01:00 概述 MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的…

    2023年4月23日
    660
  • 鸳鸯戏水图(鸳鸯戏水图)

    今天给大家分享鸳鸯戏水的知识,也给大家讲解一下鸳鸯戏水。如果你碰巧解决了你现在面临的问题,别忘了关注这个网站,现在就开始! 有没有适合结婚的字画?有什么字画比较适合结婚? 1.适合…

    投稿 2023年4月23日
    1010
  • 中国银行信用卡额度一般是多少(新人建议办哪个信用卡)

    信用卡已经是人们日常消费中必不可少的一种支付方式了,随着信用卡的普及,越来越多的人办理信用卡; 但用户的资质不同,所以持有的卡片额度也不同,而新人办卡的额度区别更是让人不能琢磨; …

    2023年4月23日
    1370
  • 24厘米等于多少毫米(脚长24厘米等于多少毫米)

    今天给大家分享一下24 cm是多少毫米的知识,解释一下24 cm是多少毫米长。如果你碰巧解决了你现在面临的问题,别忘了关注这个网站,现在就开始! 24厘米是多少毫米? 24厘米=2…

    投稿 2023年4月23日
    2020

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注