1.1.1 描述
l 正规描述
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。
l 形象描述
在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了(也不知道他会不会耍我)。
1.1.2 类图&示意代码
形式1:类的适配器模式
public class Adaptee(){ public void Operation1(){ System.out.println(“This is adaptee method 1”); }
public void Operation2(){ System.out.println(“This is adaptee method 2”); } }
public Interface IAdapter(){ Operation1(); Operation2(); Operation3(); Operation4(); }
public class Adapter extends Adaptee implements IAdapter(){ public void Operation3(){ System.out.println(“This is adapter method 3”); }
public void Operation4(){ System.out.println(“This is adapter method 4”); } }
public class Client(){ public void main(String args[]){ IAdapter adp = new Adapter(); adp Operation1(); adp Operation2(); adp Operation3(); adp Operation4(); } } |
注:
1、 Adapter继承自Adaptee(已存在的类),实现IAdapter接口
2、 IAdapter向外暴露接口,包含有Adaptee中已经存在的服务和Adapter中新增加的服务的接口
形式2:对象的适配器模式
public class Adaptee(){ public void Operation1(){ System.out.println(“This is adaptee method 1”); }
public void Operation2(){ System.out.println(“This is adaptee method 2”); } }
public Interface IAdapter(){ Operation1(); Operation2(); Operation3(); Operation4(); }
public class Adapter implements IAdapter(){ private Adaptee adp = new Adaptee();//将Adaptee作为属性,便于调用其对象中的方法
public void Operation1(){//调用Adaptee中的方法 adp.Operation1(); }
public void Operation2(){//调用Adaptee中的方法 adp.Operation2(); }
public void Operation3(){ System.out.println(“This is adapter method 3”); }
public void Operation4(){ System.out.println(“This is adapter method 4”); } }
public class Client(){ public void main(String args[]){ IAdapter adp = new Adapter(); adp Operation1(); adp Operation2(); adp Operation3(); adp Operation4(); } } |
注:
1、 Adapter关联于Adaptee(已存在的类),实现IAdapter接口
2、 IAdapter向外暴露接口,在Adapter中实现
3、 Adapter中,有些方法是直接调用Adaptee中已有的方法,有些方法是新增的方法
1.1.3 举例
比较