7.适配器模式

有句话说的非常好,对适配器下了一个非常好的定义:Convert the interface of a class into another interface clients expect,就是将一个接口转化为一个client期望的接口,以作适配。其实我们发现在Java里,很多接口有很多方法,实现了这些方法,之后,你会发现,其实你就只想用一两个方法,然而却实现了十几个,这时候,我们如果采用适配器模式,就能很好的避免这种麻烦的事情,适配器模式,实现了接口,然后空实现,当继承适配器这个类的时候,只需要重写你所需要的方法即可,十分简单。还有也是做转换用的。
具体实现如下

目标接口(客户端调用的接口)
package adapter;

//目标接口(客户端需要使用的接口)
public interface Target {
    //客户端需要请求处理的方法
    public void request();
}

源接口(需要被适配的接口)
package adapter;

//源接口(已经存在的接口)
//需要被转换的对象
//这个接口需要重新配置以适应目标接口
public class Adaptee {

    public void specifiRequest() {
        System.out.println("源接口对象调用源接口中的方法");
    }
}

适配器
package adapter;

public class Adapter implements Target {

    //持有源接口对象
    private Adaptee adaptee;

    /**
     * 构造方法,传入需要被适配的对象
     * @param adaptee
     */
    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    /**
     * 重写目标接口的方法,以适应客户端的需求
     */
    @Override
    public void request() {
        //调用源接口的方法
        System.out.println("适配器包装源接口对象,调用源接口的方法");
        adaptee.specifiRequest();
    }
}
客户端:
package adapter;

public class Client {
    public static void main(String[] args){

        //创建源对象(被适配的对象)
        Adaptee adaptee = new Adaptee();
        //利用源对象对象一个适配器对象,提供客户端调用的方法
        Adapter adapter = new Adapter(adaptee);
        System.out.println("客户端调用适配器中的方法");
        adapter.request();

    }
}
//客户端调用适配器中的方法
//适配器包装源接口对象,调用源接口的方法
//源接口对象调用源接口中的方法

优点

目标类和适配者类解耦,增加了类的透明性和复用性,同时系统的灵活性和扩展性都非常好,更换适配器或者增加新的适配器都非常方便

应用案例:

Java语言的数据库连接工具JDBC,JDBC给出一个客户端通用的抽象接口,每一个具体数据库引擎(如SQL Server、Oracle、MySQL等)的JDBC驱动软件都是一个介于JDBC接口和数据库引擎接口之间的适配器软件

应用场景

  • 后期维护,由于不同的厂家不同的产品以及不同的开发人员
  • 调用第三方组件
  • 双方都不太容易修改的时候

你可能感兴趣的:(7.适配器模式)