适配器模式
定义: 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。
主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
通过多重继承目标接口和被适配者类方式来实现适配
举例(将USB接口转为VGA接口)
USBImpl的代码:
public class USBImpl implements USB{ @Override public void showPPT() { // TODO Auto-generated method stub System.out.println("PPT内容演示"); } }
AdatperUSB2VGA 首先继承USBImpl获取USB的功能,其次,实现VGA接口,表示该类的类型为VGA。
public class AdapterUSB2VGA extends USBImpl implements VGA { @Override public void projection() { super.showPPT(); } }
Projector将USB映射为VGA,只有VGA接口才可以连接上投影仪进行投影
public class Projector<T> { public void projection(T t) { if (t instanceof VGA) { System.out.println("开始投影"); VGA v = new VGAImpl(); v = (VGA) t; v.projection(); } else { System.out.println("接口不匹配,无法投影"); } } }
test代码
@Test public void test2(){ //通过适配器创建一个VGA对象,这个适配器实际是使用的是USB的showPPT()方法 VGA a=new AdapterUSB2VGA(); //进行投影 Projector p1=new Projector(); p1.projection(a); }
类适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
根据合成复用原则,组合大于继承。因此,类的适配器模式应该少用。