适配器模式

来源:互联网 发布:国外域名要不要备案 编辑:程序博客网 时间:2024/05/21 18:47

<!--[if !supportLists]-->一、<!--[endif]-->适配器模式的结构

适配器模式(Adapter Pattern)把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式有类的适配器模式和对象的适配器模式两种形式。

类的适配器模式如下图所示:

<!--[endif]-->

对象的适配器模式结构如下:

<!--[endif]-->

适配器模式的用意是将接口不同而功能相同或相近的两个接口加以转换,这里面包括适配器角色补充了一个源角色没有的方法。读者不要误以为适配器模式就是为了补充源角色没有的方法而准备的。

<!--[if !supportLists]-->二、<!--[endif]-->适配器的适用场景

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

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

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

三、适配器模式在java中的应用

         JDBC驱动软件与适配器模式

<!--[endif]-->

 

 

缺省适配模式

缺省适配模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。很多情况下,必须让一个具体类实现某一个接口,但是这个类又用不到接口所规定的所有方法。可以用一个抽象类给出所有方法的平庸的具体实现,这样从这个抽象类再继承下去的子类就不必实现所有的方法了,而这就是缺省适配模式。

其结构图如下:

<!--[endif]-->

其源代码如下:

public interface AbstractServie{

         void serviceOperation1();

         int serviceOperation2();

         String serviceOperation3();

}

public class ServiceAdapter

         implements AbstractService

{

         public void serviceOperation1(){}

public int serviceOperation2(){ return 0;}

public String serviceOperation3(){return null;}

}

缺省适配模式的中心是一个缺省适配类。这个类应当是抽象类,因为这个类不应当实例化,它的实例也没有用处。但是这些方法不应是抽象的方法,因为按照模式的用意,这些方法之所以存在,就是为了提供默认实现,以便缺省适配类的具体子类可以按照需要只实现需要实现的方法,忽略不需要实现的方法。

jdk中当量使用缺省适配模式,在java2.0的java.awt库中,缺省适配类有WindowAdapter, ComponentAdapter, ContainerAdapter, FocusAdapter, KeyAdapter, MouseAdapter, MouseMotionAdapter, WindowAdapter

http://topic.csdn.net/u/20101019/19/fc1a3b96-4f08-4bdf-aff9-65114383de85.html