适配器设计模式

  1. 类适配器和对象适配器,对象适配器用的比较多
  2. 在设计软件的场景中一般用不上,只要对已经运行良好的接口进行扩展的时候会用到。
    刘伟 设计模式讲到 有线程的快速排序算法和线程的二分搜索算法库(Adaptee),已经有定义好的班级成绩排序的接口(Target)。
    现在客户端(Client)需要将班级排序的接口实现,复用算法库提供的能力,但是接口的数据结构可能不兼容,比如成绩排序的入参是Long类型的,算法库是Integer,需要做一层转换。也可能出参的数据需要做一些聚合。
    这里可以引用适配器类Adapter,实现Target接口:
    若是扩展Adaptee,就是类适配器。
    若是在类中关联了Adaptee,即拿到Adaptee的引用,就是对象适配器。
    在Adaptee中做一层聚合。

想笔记本电源的适配器,输入可以是110~220之间的电压,输出是稳定的12v的电压。
适配器设计模式_第1张图片
具体的例子可以看设计模式之禅的适配器章节。
文章中提了一个使用场景,做一个公司的人员信息管理系统,已经运行了一年了。现在接到的需求是需要拓展系统,加入公司外包人员的信息查询,但是外包人员的信息接口是由外包公司提供的,这两个系统都在线上运行,通过远程调用可以获得外包公司提供的接口信息。但是两个接口返回的数据接口,入参都是不一致的。这时候就需要适配器做一层改造。
先用类适配器,直接继承外包公司的抽象类,实现自己公司的接口。
继续拓展,如果外包公司的提供的信息接口是有多个接口实现的,类适配器不能使用了,因为java不支持多继承,那对象适配器更加灵活一下,拿到多个接口的引用即可。

自己实现了一个笔记本变压器的代码例子,
笔记本电源接口Target
电源适配器接口Adatper
家庭用电电源接口 Adaptee
现在笔记本电源接口只能需要12V电源,家庭用电电源接口有种规则的,有新加坡110V,中国220V。
电源适配器要能输入110~220V之间的所有电压,输出12V。

public interface IComputerPower {
    Integer getPower() throws Exception;
}
@Data
public class DomesticPower {
    private Integer volt;

    public DomesticPower(Integer volt) {
        this.volt = volt;
    }
}
public class PowerAdapter implements IComputerPower {
    private DomesticPower domesticPower;

    public PowerAdapter(DomesticPower domesticPower) {
        this.domesticPower = domesticPower;
    }

    @Override
    public Integer getPower() throws Exception {
        Integer volt = domesticPower.getVolt();
        if (volt >= 110 && volt <= 220) {
            return 12;
        }
        throw new Exception("输入电压不在适配器返回");
    }
}
public class AdapterClient {
    public static void main(String[] args) throws Exception {
        DomesticPower domesticPower = new DomesticPower(100);
        PowerAdapter powerAdapter = new PowerAdapter(domesticPower);
        Integer power = powerAdapter.getPower();
        System.out.println(power);
    }
}

你可能感兴趣的:(设计模式)