声明:这部分是号主学习“研磨设计模式”的笔记以及部分思考。
定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
理解:这有点类似HDMI和VGA的转换器,以前电脑的视频传输标准是VGA,现在电脑一般都用高清晰度多媒体接口(HDMI),如图图是网上找的(左边是VGA,右边是HDMI):
假如现在用户电脑是VGA接口,但他的投影仪采用的是HDMI接口,此时如果投影成功,那必须在加入一个VGA转HDMI的转换器,而这个转换器起的就是适配器的作用,能够使得原本由于接口不兼容而不能一起工作的那些设备一起工作。
适配器模式的结构图如下:
Client:客户端,调用自己需要的领域接口Target;
Target:定义客户端需要的和特定领域相关的接口;
Adaptee:已经存在的接口,但与客户端要求得特定领域接口不一致,需要被适配;
Adapter:适配器,将Adaptee适配成为Client需要的Target。
适配器模式的功能:
从上面举的VGA转HDMI的转换器的例子分析一下,我们之所以需要这个转换器,其实就是为了使用VGA接口(我们不可能因为投影仪采用HDMI接口,就换有HDMI接口的电脑吧),所以,可以理解为复用已有的功能,而不是实现新的接口。
所以适配器的主要功能就是进行匹配转换,目的是复用已有的功能,而不是用来实现新的接口。当然,适配器里可以实现新的功能。
那有人会问,原来的接口和新的接口有关系吗?(Adaptee与Target有关联吗?)其实可以没有关联的,但有关联也可以。
适配器的实现方式:
适配器一般有两类:对象适配器和类适配器,其中对象适配器是采用对象组合的方式实现的(只要在Adapter中持有被适配的接口对象就可以)。类适配器采用多重继承对一个接口与另一个接口进行匹配。
适配器模式的优点缺点:
- 更好的复用性。这个从定义中就可以看出。
- 更好的可扩展性。因为适配器可是适配多个Adaptee,所以可扩展性特别好。
- 过多的使用适配器,会让系统很乱。
适配器模式的本质:
匹配转换,复用功能。
什么时候用适配器模式?
- 如果想用一个已经存在的类,但它的接口不符合需求,就可以使用适配器;
- 如果想要创建一个可以复用的类,并且该类可能和一些不兼容的类一起工作,则可以使用适配器。