设计模式 适配器模式(Adapter)
适配器模式的作用是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。做法是将类自己的接口包裹在一个已存在的类中。这种类型的设计模式属于结构型设计模式。
UML角色:
Source:需要被适配的类、接口、对象,即Datas。
Destination:需要得到的类,Source通过适配得到的类对象,也就是我们期待得到的借口。
Adapter:适配器类,协调Source和Destination,使两者能够协同工作。
实现方式:
类的适配器模式(采用继承实现)
对象适配器(采用对象组合方式实现)
接口的适配器模式
应用场景:
系统需要使用现有的类,但现有的类却不兼容。
需要建立一个可以重复使用的类,用于一些彼此关系不大的类,并易于扩展,以便于面对将来会出现的类。
需要一个统一的输出接口,但是输入类型却不可预知。
类适配器模式示例分析
使用情景:当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器C来进行中转,这个适配器C要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法,然后再继承接口B实现类B1,这样我们可以在适配器C中访问接口B的方法了,这时我们在适配器C中的接口A方法中直接引用B1中的合适方法,这样就完成了一个简单的类适配器。
以ps2与usb的转接为例
ps2接口:Ps2
1 public interface Ps2 {
2 void isPs2();
3 }
USB接口:Usb
1 public interface Usb {
2 void isUsb();
3 }
USB接口实现类:Usber
public class Usber implements Usb { @Override public void isUsb() { System.out.println("USB口"); } }
适配器:Adapter
public class Adapter extends Usber implements Ps2 { @Override public void isPs2() { isUsb(); } }
测试类:Clienter
1 public class Clienter {
2
3 public static void main(String[] args) {
4 Ps2 p = new Adapter(new Usber());
5 p.isPs2();
6 }
7
8 }
结果显示:
USB口
实例讲解:
我有个ps2插头的设备,但是主机上只有适配usb插头的接口,所以要找个转换器,将ps2插头转换成为USB插头就可以让主机访问到ps2设备了。
接口Ps2:描述ps2接口格式
接口Usb:描述USB接口格式
类Usber:是接口Usb的实现类,是具体的USB接口格式
Adapter:用于将ps2接口格式转换成为USB接口格式
参考链接:https://www.cnblogs.com/V1haoge/p/6479118.html