设计模式之适配器模式

适配器,也叫做包装器,顾名思义,就是设计一个转接头,用来连接两个无法正常对接的类。

有这么一个场景,项目之初有人写了SmsService用于发短信,记录日志,同时将这个打成jar包,用于给多个项目组使用。

/**
 * @author lw
 * @date 2022/3/28 0028
 * @description  jar包里的短信服务
 */
public class SmsService {

    public void send(String toPhone,String content){
        LogRecord.log();
        System.out.println("SmsService :"+content);
        LogRecord.log();
    }
}

项目用了好久这个类,突然有一天,项目老大说,阿里有个内部人员给了优惠,我们把发短信的方法用阿里的类吧。

而项目已经进行了好久,所有人都是用jar包里这个公司统一的发送短信。

那么放在面前的有这么几条路,

方案A、 改jar包中send(),改为调用阿里的服务,改成如下代码,这样就不用改项目中其他地方的使用了。

public class SmsService {
    private AliSmsService aliSmsService;

    public void send(String toPhone,String content){
        //fromPhone,toPhone,content
       aliSmsService.send("18731667182",toPhone,content);
    }
}

但是这个jar包其他项目组在用,还是用公司的短信接口,所以pass;

方案B、修改项目中所有使用公司短信服务的代码,这也是常用的方式。

方案C、写一个适配器(我瞎编的方案C,实际全部同意使用了方案B)

public class SmsAdapter extends SmsService {
    private AliSmsService aliSmsService;

    @Override
    public void send(String toPhone,String content){
        this.aliSmsService.send("18731667182",toPhone,content);
    }
}

然后调用中将所有SmsService改为SmsAdapter,如下,

//SmsService smsService = new SmsService();

SmsService smsService = new SmsAdapter();
smsService.send("toPhone","hello world");

其实这个和将SmsService改为AliSmsService是一样的,都是ctrl+c,ctrl+v。

但是我想说的是,这帮人还没有意识到,万一阿里的优惠到期了,没有了呢?重新用回公司的短信服务?

继续改写所有使用阿里的代码?

就算是写一个自己发送短信的OwnSmsService,其中调用阿里的Service也好啊,项目统一使用OwnSmsService,就算是以后优惠到期了,也可以改写OwnSmsService中的send()啊!

在这里插入图片描述

从上图可以看出,适配器,就是将以前不合适的类或者接口,继承或者实现后,再重写方法即可。

没什么是包装一层解决不了的,如果有那就说明要两层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值