转自:http://www.cnblogs.com/ikuman/archive/2013/01/26/2866755.html Gnight的文章
定义:
属于结构型模式,其主要作用是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
比如你手机只有2.5mm接口(貌似就Nokia干的出来),但你只能买到3.5mm的,这时就需要买个适配器了(─.─|||
意图宗旨:
保留现有类所提供的服务,向客户提供接口,以满足客户的期望
什么时候可以使用它:
1你想使用一个已经存在的类,而它的接口不符合你的需求。没有2.5mm
2你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
3你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口——仅适用于对象Adapter。
如何实现:
1类适配器
1 public class Adapter extends Adaptee implements Target{ 2 @Override 3 public void getHeadset2() { 4 this.getHeadset3(); 5 } 6 public static void main(String args[]){ 7 Target target = new Adapter(); 8 target.getHeadset2(); 9 } 10 } 11 interface Target{ 12 void getHeadset2(); 13 } 14 class Adaptee{ 15 public void getHeadset3(){ 16 System.out.println("我是3.5mm的耳机哦"); 17 } 18 }
2对象适配器
1 public class Adapter implements Target{ 2 private Adaptee adaptee ; 3 public Adapter() { 4 super(); 5 this.adaptee = new Adaptee(); 6 } 7 @Override 8 public void getHeadset2() { 9 adaptee.getHeadset3(); 10 } 11 public static void main(String args[]){ 12 Target target = new Adapter(); 13 target.getHeadset2(); 14 } 15 } 16 interface Target{ 17 void getHeadset2(); 18 } 19 class Adaptee{ 20 public void getHeadset3(){ 21 System.out.println("我是3.5mm的耳机哦"); 22 } 23 }
对象的适配器模式的不同之处在于Adapter角色封装了Adaptee角色,而不像类的适配器模式所采取的继承方式。其原理基本上是相似的
3缺省适配器模式
缺省适配器模式是一种特殊的适配器模式,但这个适配器是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是空方法。而具体的子类都要继承此抽象类。