适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
就好比插头的例子,有的插头是三个头,有的插头是两个头,三头插头要插到二孔的插座上,用一个三相到两相的转换器(适配器)就可以了。
适配器模式有三种:类的适配器,对象的适配器,接口的适配器。
(1)类的适配器模式:
1 //目标接口 2 interface Target{ 3 public void method1(); 4 public void method2(); 5 } 6 7 //源类 8 class Source{ 9 public void method1(){ 10 //业务代码 11 } 12 } 13 14 //具体适配器类 15 class Adapter extends Source implements Target{ 16 17 //源类中没有的方法 18 @Override 19 public void method2() { 20 //业务代码 21 } 22 23 } 24 25 public class MyTest { 26 27 /** 28 * @param args 29 */ 30 public static void main(String[] args) { 31 Target adapter = new Adapter(); 32 adapter.method1(); 33 adapter.method2(); 34 } 35 36 }
(2)对象的适配器模式:
1 //目标接口 2 interface Target{ 3 public void method1(); 4 public void method2(); 5 } 6 7 //源类 8 class Source{ 9 public void method1(){ 10 //业务代码 11 } 12 } 13 14 //具体适配器类 15 class Adapter implements Target{ 16 17 private Source source; 18 19 public Adapter(Source source){ 20 this.source = source; 21 } 22 23 @Override 24 public void method1() { 25 source.method1(); 26 } 27 28 @Override 29 public void method2() { 30 //业务代码 31 } 32 33 } 34 35 public class MyTest { 36 37 /** 38 * @param args 39 */ 40 public static void main(String[] args) { 41 Target adapter = new Adapter(new Source()); 42 adapter.method1(); 43 adapter.method2(); 44 } 45 46 }
(3)接口的适配器模式:
1 //源接口 2 interface Source{ 3 public void method1(); 4 public void method2(); 5 } 6 7 //抽象适配器类 8 abstract class Adapter implements Source{ 9 public void method1(){} 10 public void method2(){} 11 } 12 13 //具体适配器类 14 class Adapter1 extends Adapter{ 15 public void method1(){ 16 //业务代码 17 } 18 } 19 20 class Adapter2 extends Adapter{ 21 public void method2(){ 22 //业务代码 23 } 24 } 25 26 public class MyTest { 27 28 /** 29 * @param args 30 */ 31 public static void main(String[] args) { 32 33 } 34 35 }