您的位置 首页 java

简单学设计模式——适配器模式

今天我们来聊聊 适配器 模式,这种模式也是我们开发过程中经常用到的一种模式之一,这种模式理解起来也是相对简单,下面我们来看一看 适配器模式 到底是怎样的一种模式。

简介

适配其实在生活中可见的场景很多,比如 电源适配器 ,家用的电220V,手机电脑等大多数电子产品都不能直接使用那么高的电压,所以一般充电器都有对应的适配器去让电子产品能使用这个电压,还有一些电子设备不同层级间的接口使用等等多种场景,都是源于适配器模式的设计实现的。

适配器模式属于“结构型模式”之一,该模式的核心思想就是将类中原本不适合使用的接口转换成适用的接口,并且从使用者的角度是看不到被适配的类的,降低了代码之间的耦合性,从而提高程序的兼容性。

适配器模式的工作原理就是:用户调用适配器转换出来的接口,适配器在调用被适配类的相关接口,从而完成适配, 使接口不兼容的对象能够相互合作 。适配过程可以通过继承或者组合依赖方法来实现。

如上图,如何让汽车行驶到铁轨上呢?在现实生活中很多方法,比如可以改造汽车、改造铁轨,让其中一方可以适合到另一方的运行方式,但这样的方式成本会非常大,而且不具备通用性,因此我们可以通过制作一个适配的工具来使他们能够正常运行。

铁路适配案例

在代码中要如何实现这种关系?这里我简单提供了一种实现逻辑:

首先,定义一个通用的运输方式接口,有一条铁轨实现类,里面有一个铁路专用的轮子的运行方式,非铁路专用的轮子,不能在上面行驶

再定义一个轮子接口,铁路配备专用的铁路轮,公路配备汽车用的公路轮;

我们再来一个交通工具的接口Vehicle,里面提供交通工具名称,行驶方法

根据交通工具接口来实现一个汽车类,在创建汽车的适合默认使用的是公路轮子

假如我们使用汽车原装的轮子在铁路上行驶,得到这样的答案:

输出公路的轮子不能在铁路上行走,不是铁轨专用轮子,自然不能在上面走;因此,我们需要来造一个用来适配汽车和铁路的“架子”;

我们对传入的交通工具的轮子如果不是属于铁路轮子,我们都需要给他加一层已经装有铁路轮子的“平板车”,这样就非铁路轮子相关的交通工具都可以借助这个方式在铁路上运行了;

我们来看看适配效果:

输出结果是:“ 给汽车加装了铁路轮平板车 装配的是铁路轮,可以使用铁路运输…… ”,汽车可以在铁路上运行了,达到了适配效果;

适配器模式适合应用场景

1.当你希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用适配器类。

适配器模式允许你创建一个中间层类, 其可作为代码与遗留类、 第三方类或提供怪异接口的类之间的转换器。

2.如果您需要复用处于同一个继承体系的类, 并且他们又有了额外的一些共同的方法, 但是这些共同的方法不是所有在这一继承体系中的子类所具有的共性。

你可以扩展每个子类, 将缺少的功能添加到新的子类中。但是,你必须在所有新子类中重复添加这些代码,这样会使得代码有坏味道。

将缺失功能添加到一个适配器类中是一种优雅得多的解决方案。然后你可以将缺少功能的对象封装在适配器中,从而动态地获取所需功能。如要这一点正常运作,目标类必须要有通用接口,适配器的成员变量应当遵循该通用接口。这种方式同装饰模式非常相似。

适配器模式优缺点

优点

  1. 单一职责原则 ,可以将接口或数据转换代码从程序主要业务逻辑中分离。
  2. 开闭原则,只要客户端代码通过客户端接口与适配器进行交互,就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器。

缺点

  1. 代码整体复杂度增加,因为你需要新增一系列接口和类。有时直接更改服务类使其与其他代码兼容会更简单。

总结

适配器模式是我们最常用到的模式之一,它的最直接的目的是做不同类型接口间的兼容,其主要思想也就通过“加一层”去解决,例如上述的汽车跑在铁路上跑的例子,只要在铁路上加个使用铁路轮子的“架子”,然后使用汽车来在上面驱动这个“架子”,就可以实现汽车在铁路上跑了。

开发需要记住的一点是:没有什么是加一层解决不了的问题,如果有,那就是加两层!

文章来源:智云一二三科技

文章标题:简单学设计模式——适配器模式

文章地址:https://www.zhihuclub.com/200561.shtml

关于作者: 智云科技

热门文章

网站地图