适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。java
适配器模式将某个类的接口转换成客户端指望的另外一个接口表示,目的是消除因为接口不匹配所形成的类的兼容性问题。有点抽象,咱们来看看详细的内容。app
1.一、类的适配器模式ide
类的适配器模式核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,经过Adapter类,将Source的功能扩展到Targetable里。this
package com.model.structure; public class Source { public void method1() { System.out.println("this is original method!"); } }
package com.model.structure; public interface Targetable { /* 与原类中的方法相同 */ public void method1(); /* 新类的方法 */ public void method2(); }
package com.model.structure; public class Adapter extends Source implements Targetable { public void method2() { System.out.println("this is the targetable method!"); } }
package com.model.structure; public class AdapterTest { public static void main(String[] args) { Targetable target = new Adapter(); target.method1(); target.method2(); } }
AdapterTest的运行结果:spa
1.二、对象的适配器模式code
对象的适配器模式的基本思路和类的适配器模式相同,只是将Adapter类做修改为Wrapper,此次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。对象
package com.model.structure; public class Wrapper implements Targetable { private Source source; public Wrapper(Source source) { super(); this.source = source; } @Override public void method2() { System.out.println("this is the targetable method!"); } @Override public void method1() { source.method1(); } }
package com.model.structure; public class AdapterTest { public static void main(String[] args) { Source source = new Source(); Targetable target = new Wrapper(source); target.method1(); target.method2(); } }
运行结果跟类的适配器模式例子的同样。继承
1.三、接口的适配器模式接口
接口的适配器是这样的:有时咱们写的一个接口中有多个抽象方法,当咱们写该接口的实现类时,必须实现该接口的全部方法,这明显有时比较浪费,由于并非全部的方法都是咱们须要的,有时只须要某一些,此处为了解决这个问题,咱们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了全部的方法,而咱们不和原始的接口打交道,只和该抽象类取得联系,因此咱们写一个类,继承该抽象类,重写咱们须要的方法就好了。get
这里看文字描述已经试够清楚的了,所以就不贴代码实例了。