设计模式-Adapter适配器模式

    xiaoxiao2023-10-05  154

    角色

    Target(目标对象)Client(请求者)Adapter(适配)Adaptee(被适配)

    接口实现

    继承方法

    举个栗子

    日常的直流电压是220V,但是笔记本手机等可能需要的是5V-20V,那么如何使用220V的交流电压给手机充电呢? 我们会用一个手机大头,也就是充电器,这个东西可以将电压转换为适合手机的电压。 充电器充当了适配器。 Java是面向对象的语言,在面向对象的世界里,有什么不能解决的问题,那就再加一层。 所以,Adapter模式也是这个思想,现有的代码和新的代码没有办法直接结合,那么就再加一层Adapter,让现在的新的代码可以使用旧的代码。 虽然在我们学习Java过程中,可能把原来的代码稍微改一下就可以了,但是在工作中,代码量非常大的情况下,牵一发而动全身,只要改了一行代码,都需要重新做测试,因此,应该尽量避免修改已经做过充分测试的代码,这样在添加了Adapter类或接口的时候,代码出问题就只需要重新测试新添加的代码,而不需要对原来已经测试过并且没有bug的代码重新测试。

    实现方法

    Java中可以通过继承父类或实现接口来让两者有关系。 所以实现方法也是两种。首先看实现接口的方法。

    接口实现

    Banner类是已经有的代码 Print是新的代码,是一个接口 PrintBanner是我们的Adapter, 那么要将新的代码和旧的代码联系在一起,我们就让这个PrintBanner实现新的接口,继承旧的类。 在Main里面通过Print声明一个PrintBanner对象,这样就实现了Adapter模式来让新的代码可以重用旧的代码。

    当然还可以通过继承实现

    Java里面不支持多继承,那么如何通过继承实现上面可以用接口实现的功能? 如果了解Spring/SpringBoot框架,就知道这些框架里面常用的IOC,依赖注入方法。 在现在的类里面注入需要的类,然后就可以调用注入的类中的方法。 所以例子中的功能应该如何实现? 这里面是通过在我们的Adapter中注入Adaptee对象,来调用Adaptee中的方法。 这个例子里面也就是PrintBanner中注入Banner对象。这样PrintBanner就只需要继承Print一个父类,在Main里面还是和接口的使用方法一样,通过声明Print来创建一个PrintBanner对象。

    最新回复(0)