JAVA设计模式-适配器模式介绍

适配器模式是一种结构型模式,它主要解决接口之间的兼容问题。当我们需要使用某个类的接口时,但是这个类的接口目前并不符合我们使用需求,不能直接使用,那我们可以采取调整类和接口的方式,但是如果这个接口是第三方提供的,修改不了或者类和接口目前大量使用,并且使用稳定,不能轻易改动时,我们可以使用适配器模式,在不改动这个类的前提下来满足目前系统的需求。生活中也有例子,例如:生活中m2硬盘转SATA接口的转换卡、美版、港版与国行的电源适配器。

图例

角色

  1. 目标接口(Target):定义满足目前系统需求的接口,可以是抽象类或者接口。
  2. 适配者类(Adapter):与目前系统需求不兼容的类,需要被适配的类。
  3. 适配器类(Adapter):实现目标抽象类或者接口和适配者类之间的转换。
  4. 客户类(Client):调用目标接口。

优点

  1. 将目标类和适配者类解耦,不需要改变原有代码即可满足目前需求。
  2. 具有较高的灵活性和可扩展性。

代码示例-以m2硬盘转SATA接口为例InterfaceSata(Target)

/** * All rights Reserved, Designed By monkey.blog.xpyvip.top * * @version V1.0 * @Package com.xpyvip.designpattern.adapter * @Description: SATA接口 * @Author: xpy * @Date: Created in 2022年10月04日 7:52 下午 */public interface InterfaceSata {    String installInterfaceSata();}

HardDiskM2(Adapter)

/** * All rights Reserved, Designed By monkey.blog.xpyvip.top * * @version V1.0 * @Package com.xpyvip.designpattern.adapter * @Description: m2硬盘 * @Author: xpy * @Date: Created in 2022年10月04日 7:50 下午 */public class HardDiskM2 {    public String installInterfaceM2(){        System.out.println("m2硬盘安装接口是m2");        return "m2";    }}

InterfaceAdapter(Adapter)

/** * All rights Reserved, Designed By monkey.blog.xpyvip.top * * @version V1.0 * @Package com.xpyvip.designpattern.adapter * @Description: 适配器 * @Author: xpy * @Date: Created in 2022年10月04日 7:53 下午 */public class InterfaceAdapter implements InterfaceSata {    private HardDiskM2 hardDiskM2;    public InterfaceAdapter(HardDiskM2 hardDiskM2) {        this.hardDiskM2 = hardDiskM2;    }    public String installInterfaceSata() {        String m2 = hardDiskM2.installInterfaceM2();        // 进行m2接口转换sata接口逻辑        // ......        return "sata";    }}

Client

/** * All rights Reserved, Designed By monkey.blog.xpyvip.top * * @version V1.0 * @Package com.xpyvip.designpattern.adapter * @Description: 客户类 * @Author: xpy * @Date: Created in 2022年10月04日 8:28 下午 */public class Client {    public static void main(String[] args) {        InterfaceSata interfaceSata = new InterfaceAdapter(new HardDiskM2());        interfaceSata.installInterfaceSata();    }}

原文链接:https://monkey.blog.xpyvip.top/archives/java-she-ji-mo-shi—shi-pei-qi-mo-shi