适配器模式呢大致分为两种,一种是组合的方式对象适配器,另一种是继承的方式类适配器,其他还有各种衍生。
借助慕课网的教学ppt,我们来看一下什么是对象适配器
对象适配器就是把一个“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装适配者,下面我们通过一个二相插头和三相插头的转换电流例子来看一下这种模式的运用。
我们先来看一下使用场景,我们带了一个笔记本和一个插座。
我们带的笔记本
public class NoteBook { private ThreePlugIf plug; public NoteBook(ThreePlugIf plug){ this.plug = plug; } //使用插座充电 public void charge(){ plug.powerWithThree(); }
public interface ThreePlugIf { //使用三相电流供电 public 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(); } }我们的适配器类继承了三项插座接口,实现了其输电方法,并将二相电流类作为参数对象传入。我们怎么使用这个适配器呢?
GBTwoPlug two = new GBTwoPlug(); ThreePlugIf three = new TwoPlugAdapter(two); NoteBook nb = new NoteBook(three); nb.charge();答案就是我们用我们新的子类(适配器类)实例化父类(三相插座接口),新生成的对象可以调用子类的方法powerwithThree(),实现供电转化。
那么什么是类适配器呢?
类适配器模式就是通过多重继承不兼容接口,实现对目标接口的匹配,单一的唯某个类而实现适配的这样一种模式。
public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf { @Override public void powerWithThree() { System.out.print("借助继承适配器"); this.powerWithTwo(); } }看完适配器的两种模式,我们来对比一下
类适配器只能为单一的某个类而实现,复用性较差
对象适配器可以为不同的对象实现适配,使用性较强!
Android开发之适配器模式初探,布布扣,bubuko.com
原文:http://blog.csdn.net/gerogelin/article/details/38491319