Laughing

 

适配器模式

意图:

 Adapter(别名Wrapper)模式:

                 将一个类的接口,转换成客户期望的另一个类的接口。

                 适配器让原本接口不兼容的类可以合作无间。

适配器有类适配器、对象适配器、缺省适配器三种模式。

 

要点:

1. 适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

 

对象适配器:

UML图:


先建立一个目标接口:

 

public interface target

{

    void show();

}

 

再写一个新系统的要求:
public class adaptee
{
   public void show(){System.out.println("adaptee");} 

}

 

最后写一个适配器类:
public class adapter implements target
{
   private adaptee a=new adaptee();
   //添加一个adaptee对象的引用,不一定要用要使用构造函数将其初始化传入的adaptee吧,只要可以用其方法就好了。
   public void show(){a.show();}
}

 

当然也可以把以前的target类的内容写出来,这里就不写了。

最后,一个测试类:

 

public class test

{

public static void main(String[] args)

{

               target t=new adapter();

               t.show();

}

}

类适配器UML图:

适用性:

1. 系统需要使用现有的类,而此类的接口不符合系统的需要。

2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。

3. (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

 

效果及优缺点:

对于类适配器:

1. 用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

2. 使得Adapter可以override(重定义) Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

对于对象适配器:

1. 允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。Adapter也可以一次给所有的Adaptee添加功能。

2. 使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配。

posted on 2011-10-25 10:49  巨富一生  阅读(132)  评论(0编辑  收藏  举报

导航