Spring设计模式-适配器模式实现

结构型模式:描述如何组合类和对象以获得更大的结构。

适配器模式:Adapter Pattern

是指将一个类的接口转换成用户期望的另一个接口,使原本接口不兼容的类可以一起工作,属于结构型设计模式。

使用以下几种业务场景:

1.已经存在类的方法和需求不匹配的情况

2.适配器模式不是软件初始阶段考虑的设计模式,是随着软件发展,由于不同产品,不同厂家造成功能类似而接口不同的问题的解决方案,有点亡羊补牢的感觉。

在Spring中的应用:MethodBeforeAdviceAdapter  AfterReturningAdviceAdapter  ThrowsAdviceAdapter

Spring会根据不同的Aop配置来使用对应得Advice

适配器模式优缺点:

优点:

1.能提高类得透明性和复用性,现有的类会被复用但不需要改变。

2.目标类和适配器类解耦,可以提高程序得扩展性。

3.在很多业务场景中符合开闭原则。

缺点:

1.在配饰器代码编写过程中需要进行全面考虑,可能会增加系统得复杂性。

2.增加了代码阅读难度,降低了代码得可读性,过多使用适配器会使系统代码变得凌乱。

实例

创建一个任务实现的是Callable接口

/**
 * @author QiTian
 * @date 2023/11/11
 * @Description 用一个Adapter,把这个Callable接口“变成”Runnable接口
 */
public class Task implements Callable {
    private long num;
    public Task(long num) {
        this.num = num;
    }
    @Override
    public Long call() throws Exception {
        long r = 0;
        for (long n = 1; n <= this.num; n++) {
            r += n;
        }
        System.out.println("result: "+r);
        return r;
    }
}

定义一个适配器类,接收Callable,输出Runnable

/**
 * @author QiTian
 * @date 2023/11/11
 * @Description RunnableAdapter类就是Adapter,它接收一个Callable,输出一个Runnable。
 */
public class RunnableAdapter implements Runnable {
    // 引用待转换接口:
    private Callable<?> callable;
    public RunnableAdapter(Callable<?> callable) {
        this.callable = callable;
    }
    // 实现指定接口:
    @Override
    public void run() {
        // 将指定接口调用委托给转换接口调用:
        try {
            callable.call();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

编写测试类,使用一个Thread,以构造器的方式传入参数,但是由于Thread只能接收Runnable类型的数据,因此我们需要编写一个RunnableAdapter 来将Callable类型的数据进行转换,方可完成线程调用。

public class Test {
    public static void main(String[] args) {
        Callable<Long> callable = new Task(111000L);
        Thread t = new Thread(new RunnableAdapter(callable));
        t.start();
    }
}

测试输出结果  result: 6160555500

  • 17
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值