设计模式之适配器模式

1.适配器模式概念

用于将一个类的接口转换成客户希望的另一个接口。适配器模式让原本由于接口不兼容而不能一起工作的那些类可以一起工作

2.适配器组成部分

1)目标接口 (Target): 客户端期望使用的接口。

2)适配者类 (Adaptee): 需要适配的已有类,其接口不符合目标接口的要求。

3)适配器类 (Adapter): 将适配者接口转换为目标接口,充当适配者和目标之间的桥梁。

3.举个栗子:

平常我们使用的用电器时,会遇到插头和插板孔不对的情况,我可以选择买一个接头转换器,然后就能正常使用了

如下图:

4.代码实现

1)ThreePort实现类

java 复制代码
package org.xiji.adapter;

/**
 * 接口
 */
public interface ThreePort {
    //输入电源
    String inputPower();

}

2)TwoPort实现类

java 复制代码
package org.xiji.adapter;

/**
 * 两孔插头
 */
public class TwoPort {

    //接通电源
    public void connectPower(String power) {
        System.out.println(power+"    两孔插头接通电源正常工作  ");
    }
}

3)ThreeAdapteTwo实现类

java 复制代码
package org.xiji.adapter;

/**
 * 适配器
 */
public class ThreeAdapterTwo implements ThreePort{
    private TwoPort twoPort;
    @Override
    public String inputPower() {
        return "输出电源";
    }

    /**
     *
     * 接通电源
     */
    public void connectPower(){
        this.twoPort.connectPower(this.inputPower());
    }

    public ThreeAdapterTwo() {
    }

    public TwoPort getTwoPort() {
        return this.twoPort;
    }

    public void setTwoPort(TwoPort twoPort) {
        this.twoPort = twoPort;
    }

    public ThreeAdapterTwo(TwoPort twoPort) {
        this.twoPort = twoPort;
    }
}

4)测试类

java 复制代码
package org.xiji.adapter;

/**
 * 适配器测试类
 */
public class AdapterMain {
    public static void main(String[] args) {
        //创建插头
        System.out.println("创建插头");
        TwoPort twoPort = new TwoPort();
        
        //创建多孔适配器
        System.out.println("创建多孔适配器");
        ThreeAdapterTwo threeAdapterTwo = new ThreeAdapterTwo();

        //两孔插头插入多孔连接器
        System.out.println("两孔插头插入多孔连接器");
        threeAdapterTwo.setTwoPort(twoPort);

        //连接三孔插头电源
        System.out.println("连接三孔插头电源");
        threeAdapterTwo.connectPower();

    }
}

5)测试结果如下

相关推荐
会飞的架狗师23 分钟前
【Spring Cloud Gateway】Nacos整合遇坑记:503 Service Unavailable
java·开发语言
重生之后端学习1 小时前
02-前端Web开发(JS+Vue+Ajax)
java·开发语言·前端·javascript·vue.js
字节源流7 小时前
关于maven的依赖下不下来的问题
java·maven
pjx9878 小时前
服务间的“握手”:OpenFeign声明式调用与客户端负载均衡
java·运维·spring·负载均衡
prinrf('千寻)8 小时前
MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
java·开发语言·mybatis
老华带你飞9 小时前
实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
java·数据库·spring boot·小程序·论文·毕设·实习记录小程序
在未来等你9 小时前
互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战
java·微服务·ai·kubernetes·大模型·embedding·spring ai
源码技术栈9 小时前
SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
java·大数据·云计算·云his·his系统·云医院·区域his
编程、小哥哥9 小时前
互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
java·spring boot·redis·微服务·prometheus·面试技巧
揽你·入怀10 小时前
数据结构:ArrayList简单实现与常见操作实例详解
java·开发语言