适配器模式
定义:适配器模式将一个类的接口,转化成客户期望的另一个接口。使得原本由于接口不兼容
而不能一起工作的那些类可以在一起工作。
适配器分类
1组合
采用组合方式的适配器称为对象适配器
特点:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被支配者。
2继承
采用继承方式的称为类适配器
特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配。
作用
1、透明
通过适配器,客户端可以调用同一个接口,因而对客户端来说是透明的。这样做更加简单、
更直接、更紧凑
2、重用
复用了现存的类,解决了现存类和复用环境要求不一致的问题。
3、低耦合
将目标类和适配类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码(遵循开闭原则)
案例:
笔记本电脑使用三相电流,插座为二相供电。
/** * 三相插座接口 */ public interface ThreePlugIf { //使用三相交流电供电 void powerWithThree(); }
/** * 二相插座 */ public class GBTwoPlug { //使用二相电流供电 public void powerWithTwo(){ System.out.println("使用二相电流供电"); } }
/** * 三相转二相的插座适配器 */ public class TwoPlugAdapter implements ThreePlugIf{ private GBTwoPlug plug; public TwoPlugAdapter(GBTwoPlug plug){ this.plug=plug; } @Override public void powerWithThree() { System.out.println("将三相转化为二相"); plug.powerWithTwo(); } }
/** * 使用继承方式的适配器 */ public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf{ @Override public void powerWithThree() { System.out.println("使用继承的方式"); this.powerWithTwo(); } }
public class NoteBook { private ThreePlugIf plug; public NoteBook(ThreePlugIf plug){ this.plug=plug; } //使用插座充电 public void charge(){ plug.powerWithThree(); } public static void main(String[] args){ GBTwoPlug two=new GBTwoPlug(); ThreePlugIf three=new TwoPlugAdapter(two); NoteBook nb=new NoteBook(three); nb.charge(); //使用继承的方式 three=new TwoPlugAdapterExtends(); nb=new NoteBook(three); nb.charge(); } }将三相转化为二相
使用二相电流供电
使用继承的方式
使用二相电流供电