淘姐妹

淘姐妹

软件典型设计模式的五个类型

电脑 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】


适配器是一种结构型设计模式,它允许具有不兼容接口的对象进行协同工作。

假设您正在创建一个股市监控应用程序。该应用程序从多个来源以XML格式下载股票数据,然后为用户显示漂亮的图表和图示。

在某个时候,您决定通过集成一个智能的第三方分析库来改进应用程序。但是有一个问题:该分析库只能处理JSON格式的数据。

您无法直接使用原始的分析库,因为它期望的数据格式与您的应用程序不兼容。

您可以尝试修改库以适应XML格式的数据。然而,这可能会破坏一些依赖于该库的现有代码。更糟糕的是,您可能一开始就无法访问库的源代码,使得这种方法不可行。

您可以创建一个适配器。适配器是一个特殊的对象,它将一个对象的接口转换为另一个对象可以理解的接口。

适配器包装了其中一个对象,隐藏了底层转换的复杂性。被包装的对象甚至不知道适配器的存在。例如,您可以使用一个将数据转换为英制单位(如英尺和英里)的适配器来包装一个以米和千米为单位的对象。

适配器不仅可以将数据转换为不同的格式,还可以帮助具有不同接口的对象进行协作。其工作原理如下:

  1. 适配器获得一个与现有对象兼容的接口。
  2. 使用这个接口,现有对象可以安全地调用适配器的方法。
  3. 在接收到调用时,适配器将请求传递给第二个对象,但是按照第二个对象期望的格式和顺序进行。

有时甚至可以创建一个双向适配器,可以在两个方向上转换调用。

让我们回到股票市场应用程序。为了解决不兼容格式的问题,您可以为您的代码直接使用的分析库的每个类创建XML到JSON的适配器。然后,您需要调整您的代码,只通过这些适配器与库进行通信。当适配器接收到调用时,它会将传入的XML数据转换为JSON结构,并将调用传递给包装的分析对象的适当方法。

一次出国旅行前和旅行后的行李箱。

当您第一次从美国去欧洲旅行时,尝试给笔记本电脑充电时可能会感到惊讶。不同国家的电源插头和插座标准是不同的。这就是为什么您的美国插头无法插入德国插座的原因。您可以通过使用一个具有美式插座和欧式插头的电源插头适配器来解决这个问题。

对象适配器

这种实现采用了对象组合原则:适配器实现了一个对象的接口并包装另一个对象。它可以在所有流行的编程语言中实现。

1、客户端是包含程序中现有业务逻辑的类。

2、客户端接口描述了其他类必须遵循的协议,以便能够与客户端代码进行协作。

3、服务类是一些有用的类(通常是第三方或遗留类)。客户端不能直接使用该类,因为它具有不兼容的接口。

4、适配器是一个能够同时与客户端和服务类一起工作的类:它实现了客户端接口,并包装了服务对象。适配器通过适配器接口接收来自客户端的调用,并将其转换为对被包装的服务对象的调用,以便服务对象能够理解。

5、只要客户端通过客户端接口与适配器进行交互,客户端代码就不会与具体的适配器类耦合在一起。因此,可以在不破坏现有客户端代码的情况下引入新类型的适配器到程序中。这在服务类的接口发生变化或替换时非常有用:只需创建一个新的适配器类,而无需更改客户端代码。

类适配器

这种实现使用继承:适配器同时从两个对象继承接口。请注意,这种方法只能在支持多重继承的编程语言(如C++)中实现。

类适配器不需要包装任何对象,因为它从客户端和服务端都继承了行为。适配发生在覆盖的方法内部。生成的适配器可以替代现有的客户端类使用。

这个适配器模式的例子基于方钉和圆孔之间的经典冲突。

将方钉适配到圆孔中。

适配器假装是一个圆钉,半径等于方钉直径的一半(换句话说,是能容纳方钉的最小圆的半径)。

1、当您想要使用某个现有类,但其接口与您的代码不兼容时,可以使用适配器类。

适配器模式允许您创建一个中间层类,它在您的代码和遗留类、第三方类或任何具有奇怪接口的类之间充当翻译者。

2、当您希望重用多个现有的子类,但这些子类缺少某些无法添加到超类中的公共功能时,可以使用该模式。

您可以扩展每个子类并将缺失的功能放入新的子类中。然而,您将需要在所有这些新类中复制代码,这是一种非常不好的做法。

更加优雅的解决方案是将缺失的功能放入适配器类中。然后,您可以将缺少功能的对象包装在适配器中,动态获得所需的功能。为了使其工作,目标类必须具有公共接口,并且适配器的字段应遵循该接口。这种方法与装饰器模式非常相似。

  1. 请确保您至少有两个具有不兼容接口的类:
  • 一个有用的服务类,您无法更改它(通常是第三方类、遗留类或具有大量现有依赖)。
  • 一个或多个客户端类可以从使用服务类中受益。
  1. 声明客户端接口并描述客户端如何与服务进行通信。
  2. 创建适配器类,并使其遵循客户端接口。现在先将所有方法保留为空。
  3. 在适配器类中添加一个字段来存储对服务对象的引用。通常的做法是通过构造函数来初始化该字段,但有时在调用适配器方法时将其传递给适配器更加方便。
  4. 逐个在适配器类中实现客户端接口的所有方法。适配器应该将大部分实际工作委托给服务对象,仅处理接口或数据格式的转换。
  5. 客户端应通过客户端接口使用适配器。这样,您可以在不影响客户端代码的情况下更改或扩展适配器。


克罗地亚超跑rimac多少钱 克罗地亚超跑rimac400米加速

克罗地亚小众超跑,克罗地亚ramic跑车,克罗地亚超跑rimac股东,克罗地亚电动超跑rimac

一提到克罗地亚,你首先想到的是什么,是足球,是达沃苏克,是莫德里奇,但其实该国家首都萨格勒布也诞生了一个超跑品牌,名为Rimac,该品牌目前只推出了一款车型,也就是旗舰产品名为Nevera,该车的最大功率达到了惊人的1941马力,售价220万美元,此前创造了近20项加速和制动的记录,虽然明显仍在采用手工作坊式的方式运营一共也没有造出几辆车,但官方仍在推进着产品和品牌的建设。

在外观方面,新车在前脸部分采用了典型的超跑式造型,扁平的前格栅有着大面积碳纤维面板封死,前保险杠部分则加入了夸张的三段式镂空装饰,加上中间凹陷的车头,左右两侧隆起的线条和扁平的大灯组,前机盖处额外的进气道到等细节,显得相当的激进。在车身侧面,新车则同样有着标准的超跑线条,虽然是电动跑车,但能保持了位于正中的驾驶位置,低矮流畅的线条,特殊的车轮后方碳纤维翼片,夸张的车门进气道,通向后轮的散热导流槽等细节,加上大尺寸多幅轮毂,打孔刷车盘,巨大的刹车卡钳等元素,显示出不错的运动感。

在车尾部分,分体式扰流板这样的元素当然不会缺席,尽管没有了中置的发动机以供展示,但后风挡玻璃尺寸依旧很大,尾灯则采用了弯折的红色造型,拥有着巨大的碳纤面板进行补充,夸张的扩散器设计取代了排气效果,有着与车头车侧对应的战斗感。在内饰部分,新车则采用了相对简洁化的设计。左中右三款液晶屏幕,可以显示简洁的信息。将绝大部分注意力都集中在驾驶之上。

而大面积翻毛皮材质覆盖,随处可见的碳纤维面板装饰,巨大的实体控制旋钮等元素也都没有缺席,是一副标准的超跑姿态。在动力方面,作为该车最大的重点,新车搭载了一套电控四驱动力系统,依靠电动机的强大参数,最大功率可达1941马力,最大扭矩2339牛米,0~96km加速仅用1.7秒,有着全球顶级的性能参数,匹配的是120kwh锂电池组,由于动力实在是太过强劲,纯电续航里程即使在纯前驱的巡航模式下也只有480km。

但该车又有着非常高的充电效率,本身支持最大500kw的直流快充能力,350kw的功率下只需要25分钟就可将电量充至80%,新车还支持多种驾驶模式可供选择,保罗偏向于后驱的漂移模式,以近2000马力的动力实现漂移刺激的程度可见一斑。而电脑控制的主动悬挂系统能提供相对舒适的减震,足以应付各种场景的需求,未来能有怎样的表现,非常值得期待。

举报/反馈