Java设计模式之适配器模式(Adapter)

    一般,在代码已经存在的状况下编写客户端代码(客户端就是须要调用咱们代码的对象),开发人员能够采起模拟客户端的方式调用咱们提供的接口对象。然而,客户端代码也可能与你的代码单独进行开发,这种状况下,会发现虽然现有代码提供了客户端须要的服务,但被定义成不一样的方法名。这时,咱们就须要采用适配器模式。适配器模式的意图在于,使用不一样接口的类所提供的服务为客户端提供它所须要的接口。java

    适配器模式可分为两种:ide

  (1)类适配器ui

  (2)对象适配器this

类适配器:对象

     当咱们适配现有代码时,发现客户端开发人员已经考虑到了这种情形,开发人员为客户端使用的服务提供了接口定义。以下:blog

public interface RequiredInterface {
    public void requiredMethod();
}

RequiredInterface接口定义了客户端须要调用的服务方法requiredMethod,在ExsitingClass类中,则定义了usefulMethod方法,它是客户端须要的服务实现。继承

public class ExistingClass {
    public void usefulMethod() {
        System.out.println("useful method!!!");
    }
}

若要对ExistingClass进行适配,知足客户端须要,则能够建立一个NewClass类,继承ExistingClass,同时继承RequiredInterface接口,经过重写requiredMethod方法将客户端的请求委托给usefulMethod方法,以下:接口

public class NewClass extends ExistingClass implements RequiredInterface{

    public void requiredMethod() {
        this.usefulMethod();
    }
}

 

                                     图1开发

图1中的NewClass类就是类适配器的例子。该类的实例同时也是RequiredInterface的实例。换言之,NewClass类知足类客户端的需求。it

 

当客户端在接口中定义了它所期待当行为时,就能够使用类适配器,提供一个实现该接口的类。假若没有定义客户端的接口,则不能使用类适配器,此时必须使用对象适配器。在类适配器中,新的适配器类实现了定义的接口,同时继承现有类。当你须要适配的方法并不是定义在接口中时,这种方法就不凑效类。此时咱们能够建立一个对象适配器,使用委托而非继承,以下图所示:

 

上图中的NewClass是对象适配器的一个例子,该类的实例也是RequiredClass的实例,换言之,NewClass知足了客户端的须要。NewClass经过使用ExistingClass实例对象,能够将ExistingClass类适配为符合客户端的须要。

public class RequiredClass {
    public void requiredMethod(){

    }
}

public class NewClass extends RequiredClass {

    private ExistingClass existingClass = new ExistingClass();

    @Override
    public void requiredMethod() {
        existingClass.usefulMethod();
    }
}

     适配器模式能够是咱们重用一个现有的类,以知足客户端的须要。当客户端经过接口表达其需求时,采用类适配器,建立一个实现该接口的类,同时继承现有类。 当客户端没有指定它所须要的接口时,应采用对象适配器,建立一个类使用现有类的实例。若是咱们不须要(或者不能)重写客户端可能调用的方法时,这种方式可能存在必定的危险性。

相关文章
相关标签/搜索