给 Java 造个轮子 - Chain

本文介绍了如何为 Java 设计一个名为 Chain 的框架,以简化链式调用的实现。从 Supplier 和 Consumer 接口出发,构建了一个基本的 Chain 类,允许对象在链式调用中无缝转换和操作。文章逐步完善 Chain 类,通过避免频繁创建新对象,提高效率,并探讨了与 Java 泛型相关的实现细节。最终展示了 Chain 在实际场景中的应用,证明其简洁且有效。
摘要由CSDN通过智能技术生成

在前不久发的「 Java 中模拟 C# 的扩展方法 」一文中给 Java 模拟了扩展方法。但毕竟没有语法支持,使用起来还是有诸多不便,尤其是需要不断交错使用不同类中实现的“扩展方法”时,切换对象非常繁琐。前文也提到,之所以想到研究“扩展方法”其实只是为了“链式调用”。

那么,为什么不直接从原始需求出发,只解决链式调用的问题,而不去考虑更宽泛的扩展方法呢?前文研究过通过 Builder 模式来实现链式调用,这种方式需要自己定义扩展方法类(也就是 Builder),仍然比较繁琐。

Chain 雏形

链式调用的主要特点就是使用了某个对象之后,可以继续使用该对象 …… 一直使用下去。你看,这里就两件事:一是提供一个对象;二是使用这个对象 —— 这不就是 Supplier 和 Consumer 吗?Java 在 java.util.function 包中正好提供了同名的两个函数式接口。这样一来,我们可以定义一个 Chain 类,从一个 Supplier 开始,不断的“消费”它,这样一个简单的 Chain 雏形就出来了:

public class Chain<T> {
    private final T value;

    public Chain(Supplier<? extends T> supplier) {
        this.value = supplier.get();
    }

    public Chain<T> consume(Consumer<? super T> consumer) {
        consumer.accept(this.value);
        return this;
    }
}

现在,假如我们有一个 Person 类,它有一些行为方法:

class Person {
    public void talk() { }
    public void walk(String target) { }
    public void eat() { }
    public void sleep() { }
}

还是前文中那个业务场景:谈妥了,出去&

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值