流畅接口(Fluent Interface)

流畅接口就是用起来很流畅了:-) , 到底长什么样子呢? 咱们看看Martin Flower 举的例子:

订单包括订单项(line item) , 由产品和产品的数量组成,  一个订单项是可以忽略的(skippable) , 意思是说我宁愿不要这个产品, 也想整个订单的其他产品能及时发送。 另外,我能给整个订单一个紧急的状态。

对这种事情最常见的构建方式像下面这样:

    private void makeNormalOrder(Customer customer) {

        Order o1 = new Order();

        customer.addOrder(o1);

        OrderLine line1 = new OrderLine(6, Product.find("TAL"));

        o1.addLine(line1);

        OrderLine line2 = new OrderLine(5, Product.find("HPK"));

        o1.addLine(line2);

        OrderLine line3 = new OrderLine(3, Product.find("LGV"));

        o1.addLine(line3);

        line2.setSkippable(true);

        o1.setRush(true);

    }

本质上我们创建了各种各样的对象,然后把他们绑到了一起。

如果我们不能在Order 的构造函数中创建一起的话, 我们必须用各种临时的变量来帮助完成Order 对象的装配工作,例如 line 1, line2, line3, 然后把他们都加到order 当中。 

用一个流畅接口来完成对象的装配是什么样子的呢?

 private void makeFluentOrder(Customer customer) {

        customer.newOrder()

                .with(6, "TAL")

                .with(5, "HPK").skippable()

                .with(3, "LGV")

                .priorityRush();

}

是不是看起来又清爽又易懂。

实现起来不不太难 , 关键点是return this . 

public class Order{

    boolean rush = false;

    public Order with(int qty,String productName){

        OrderLine line = new OrderLine(qty, Product.find(productName));

        this.addLineItem(line);

        return this  ; 

    }

    public Order priorityRush(){

        this.rush = true;        return this ;  

    }

}

但是还有个小问题,skippable() 该如何实现? 这个问题就留个你了 :-)

-----------------------------------------------------------------------------------

码农翻身公共号(coderising) : 由工作15年的IBM架构师创建,分享编程和职场的经验教训。

回复下面的关键字,查看更多文章

牛人 键盘侠 留学 读书 调试 烂代码 小白 培训

数据结构 代码腐化 无聊 迷茫 刚工作 死锁 简历  真实项目

HTTP Session XML AJAX TOMCAT 反射 

加入码农翻身QQ群:135769418 每周日晚9点至10点定期授课,不容错过。

长按二维码, 关注"coderising"

0?wx_fmt=jpeg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值