适配器模式(封装对象,并提供不同的接口)

源码地址 https://github.com/DingMouRen/DesignPattern
定义

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

使用场景
  • 我们要使用一个类,但是这个类的接口不能我们的需要,接口不兼容
  • 建立一个可以重复使用的类,可以让一些彼此之间没有太大关联类(包括将来可能引进的类)在一起工作,
  • 需要一个统一的输出接口,输入端可以是多种多样的
协作

客户在Adapter实例上调用一些操作,然后适配器调用Adaptee的操作来实现这个请求。


适配器模式有类适配器模式和对象适配器模式两种,下面分别讲述


类适配器模式

适配器模式(封装对象,并提供不同的接口)_第1张图片
类适配器模式.png

  • Target期待得到的接口。我们讨论的是类适配器模式,目标不能是类
  • Adaptee 需要适配的接口
  • Adapter 适配器类,适配器将源接口转换成目标接口。适配器必须是具体类


    类适配器是通过实现Target接口以及继承Adaptee类来实现接口转换。
举个栗子
//Target类:期待得到的接口
public interface Volt5 {
    public int get5V();
}

//Adaptee需要被转换的对象
public class Volt220 {
    public int get220V(){
        return 220;
    }

}

//Adapter适配器类,将220V转换成5V
public class Volt220To5Adapter extends Volt220 implements Volt5 {
    @Override
    public int get5V() {
        return 5;
    }
}

总结

类适配器用一个具体的Adapter类对Adaptee和Target进行匹配。如果我们想要匹配一个类以及所有它的子类的时候,这个Adapter就不能胜任工作了。此处的Adapter类是Adaptee的子类,可以冲重写Adaptee的部分行为。


对象适配器模式

适配器模式(封装对象,并提供不同的接口)_第2张图片
对象适配器模式.png

举个栗子
//目标类,期待得到的接口
public interface Volt5 {
    int get5V();
}

//Adaptee需要被转换的对象
public class Volt220 {
    public int get220V(){
        return 220;
    }
}

//Adapter类,
public class VoltAdapter  implements Volt5{

    private Volt220 volt220;//持有需要转换的对象的引用

    public VoltAdapter(Volt220 volt220) {
        this.volt220 = volt220;
    }

    public int get220V(){
        return volt220.get220V();
    }

    @Override
    public int get5V() {
        return 0;
    }
}
总结

对象适配器模式允许一个Adapter类与多个Adaptee(自身以及它所有的子类)一起工作。

你可能感兴趣的:(适配器模式(封装对象,并提供不同的接口))