适配器模式
生活中的适配器
朋友们,不知道你们在生活中,有没有遇到下面这样的一个场景
是的,我们必然会遇到类似的这种插头与插座不匹配的问题,而这样的问题也常常会使我们感到困扰.
因此,为了解决这一类问题,世界上又多了一样东西,那就是适配器
有了这个适配器,我们就可以通过它,将我们的插头与插座进行正常的接通了
话说回来,既然生活中有这种场景,那么我们的程序中,是否有应用这种模式的地方呢,答案是肯定的,那么接下来,我们就开始进入正题
适配器模式角色
适配器模式中有着4大角色:
• Target:
目标接口(可以是抽象类或接口),客户希望直接用的接口,这里可以理解为插头
• Adaptee:
适配者,但是与Target不兼容,这里可以理解为插座
• Adapter:
适配器类,此模式的核心.通过继承或者引用适配者的对象,把适配者转为目标接口,这里可以理解为上面的适配器,用来接通插头和插座
• client:
需要使用适配器的对象,这里当然就是程序中的调用方
啦
适配器的应用
相信大家都用过Slf4j来打印程序中的日志,而在程序中,打印日志的功能并不是Slf4j来实现的,而是通过底层的Log4j或者LogBack来实现的,Slf4j只负责对他们进行调用.
Adaptee
target
Adapter
上面虽然我们只实现了Log4j的适配调用,但是我们可以看到,我们只需要改一下适配器中的配置,将Log4j转换成LogBack即可完成对LogBack的适配调用
适配器模式应用场景
一般来说,适配器模式可以看作⼀种"补偿模式",用来补救设计上的缺陷.应用这种模式算是"无奈之举",如果在设计初期,我们就能协调规避接口不兼容的问题,就不需要使用适配器模式了,所以适配器模式更多的应用场景主要是对正在运行的代码进行改造,并且希望可以复用原有代码实现新的功能.比如版本升级等.