设计模式-适配器模式

特点

适配器模式主要将已有的接口转化适配成客户需要使用的接口,针对代码后期补救措施,一般在代码设计之初不会采用,主要应用场景是兼容之前的接口。它属于结构型模式,主要实现方式为类适配(继承)和对象适配(组合)的方式。本文基于经典的充电器问题进行说明。

核心代码

提供电压接口(插座)

@Slf4j
public class Socket{
    private int voltage = 220;

    // 提供一个电压
    public int support220(){
        log.info("插座能提供电压: {}",voltage);
        return this.voltage;
    }
}

客户端需要的接口

public interface Voltage {
    int support110();
}

类适配

ExtendAdapter

@Slf4j
public class ExtendAdapter extends Socket implements Voltage {

    @Override
    public int support110() {
        int support110 = super.support220() / 2;
        log.info("适配器提供电压: {}",support110);
        return support110;
    }
}

这个适配类继承Socket

测试代码

    @Test
    public void testExtendAdapter(){
        ExtendAdapter extendAdapter = new ExtendAdapter();
        extendAdapter.support110();
    }

日志信息

2021-03-12 13:22:04.559  INFO 117312 --- [           main] org.example.adapter.core.Socket          : 插座能提供电压: 220
2021-03-12 13:22:04.561  INFO 117312 --- [           main] o.example.adapter.extend.ExtendAdapter   : 适配器提供电压: 110

对象适配

AssemblyAdapter

@Slf4j
public class AssemblyAdapter implements Voltage {

    private Socket socket;

    public AssemblyAdapter(Socket socket) {
        this.socket = socket;
    }

    @Override
    public int support110() {
        int support110 = socket.support220() / 2;
        log.info("适配器提供电压: {}",support110);
        return support110;
    }
}

测试

    @Test
    public void testAssemblyAdapter(){
        // 插座只能提供的220的电压
        Socket socket = new Socket();
        // 接入适配后
        AssemblyAdapter assemblyAdapter = new AssemblyAdapter(socket);
        assemblyAdapter.support110();
    }

日志信息

2021-03-12 13:23:45.361  INFO 118224 --- [           main] org.example.adapter.core.Socket          : 插座能提供电压: 220
2021-03-12 13:23:45.363  INFO 118224 --- [           main] o.e.adapter.assembly.AssemblyAdapter     : 适配器提供电压: 110
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值