适配器Adapter模式

适配器Adapter模式
生活中的场景
  
适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

模式中的角色:
目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

下面的场景,如何解决?

在Client类中的use()方法需要出入Target(目标接口类型的对象)。Adaptee中的request方法是我们要使用到的方法。
但是在Cilent的使用中我们只能调用Target接口中的方法。
只能在Client类中使用实现类Target接口的类。==>Target相当于使用的规范和标准。

适配器模式解决方案:

Adaptee表示需要适配的类。将Adaptee类的实例传入到实现类Target接口的Adapter。此适配器类相当于中间层。
当Target接口中存在许多的方法,可以将Adater适配器类,设置成abstract抽象类。抽取出Target中的一些需要用到的方法,同时可以实现部分方法。

Target目标接口:

public interface Target {
    void handleReq();
}
View Code

需要适配的类Adaptee:

/**
 * 需要适配的类
 * (相当于例子中的,PS/2键盘)
 * @author Administrator
 *
 */
public class Adaptee {
    
    public void request(){
        System.out.println("可以完成客户请求的需要的功能!");
    }
}
View Code

适配器类:

/**
 * 适配器 (对象适配器方式,使用了组合的方式跟被适配对象整合)
 * (相当于usb和ps/2的【转接器】)
 * @author Administrator
 *
 */
public class Adapter2  implements Target {
    
    private Adaptee adaptee;
    
    @Override
    public void handleReq() {
        adaptee.request();
    }

    public Adapter2(Adaptee adaptee) {
        super();
        this.adaptee = adaptee;
    }

}
View Code

Client类:

/**
 * 客户端类
 * (相当于例子中的笔记本,只有USB接口)
 * @author Administrator
 *
 */
public class Client {
    
    public void test1(Target t){
        t.handleReq();
    }
    
    public static void main(String[] args) {
        Client  c = new Client();
        
        Adaptee a = new Adaptee();
        
//        Target t = new Adapter();

        Target t = new Adapter2(a);
        
        c.test1(t);
        
    }
}
View Code

 

posted @ 2018-12-13 21:36  payn  阅读(168)  评论(0)    收藏  举报