适配器模式

将一个接口转换成客户希望的另一个接口, 使接口不兼容的那些类可以一起工作, 其别名为包装器(Wrapper).

结构

  • 目标抽象类: 目标抽象类定义客户所需接口, 可以是一个抽象类或接口, 也可以是具体类.
  • 适配器类: 转换器, 它通过继承Target并关联一个Adaptee对象使二者产生联系.
  • 适配者类: 适配者即被适配的角色, 一般是类
    适配器模式
Demo
目标抽象类: 即希望得到直流电
public  interface DirectCurrent {

    int transform();

}

适配者类: 但是现在只有交流电
public class AlternatingCurrent {

    public int output() {
        System.out.println("输出交流电" +  200 + "V");
        return 220;
    }
}
适配器类: 继承目标抽象类并且关联适配者类, 进行转换适配, 一般使用对象适配器

对象适配器:

public class DirectCurrentAdapter implements DirectCurrent {

    private AlternatingCurrent alternatingCurrent;

    public DirectCurrentAdapter() {
        this.alternatingCurrent = new AlternatingCurrent();
    }

    @Override
    public int transform() {

        int i = alternatingCurrent.output()/44;
        System.out.println("转换直流电: " + i + "V");
        return i;
    }
}

类适配器:

public class DirectCurrentObjAdapter extends AlternatingCurrent implements DirectCurrent {
    @Override
    public int transform() {

        int i = output()/44;
        System.out.println("转换直流电: " + i + "V");
        return i;
    }
}
测试:
public class AdapterTest {

    public static void main(String[] args) {

        DirectCurrent directCurrentAdapter = new DirectCurrentAdapter();

        int transform = directCurrentAdapter.transform();

        System.out.println(transform);

    }
}

输出结果:

输出交流电200V
转换直流电: 5V
5

结论

  • 目标类和适配类解耦, 易于扩展, 复用
  • 区分类适配器和对象适配器, 一般使用对象适配器

   版权声明

文章作者: liuzhihang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源!

评论