Android 链式调用(方法链)

参考Android之链式调用(方法链)

最近在学习总结Android属性动画的时候,发现Android的属性动画设计采用了链式调用的方式,然后又回顾了一下了以前接触的开源框架Glide也是采用链式调用的方式,还有最近火的一塌糊涂的RxJava也是采用链式调用,为何如此之多的开源项目采用这种设计方式,今天来对比学习一下。

Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher).into(imageView);
    //通过返回this来实现
    public BnRequestHandler url(String url)
    {
        URL = url;
        return this;
    }
    
     BnRequestHandler handler = new BnRequestHandler(getActivity());
            handler.url("migraine/hq/")
                    .get()
                    .executeAsObservable()
                    .subscribeOn(Schedulers.io())
                    .observeOn(Schedulers.io())
                    .subscribe(new Subscriber()
                    {
                        @Override
                        public void onCompleted()
                        {
                        }

                        @Override
                        public void onError(Throwable e)
                        {
                        }

                        @Override
                        public void onNext(String s)
                        {
                }
    }
MsgInfo msgInfo = new MsgInfo();
msgInfo.setOwnerId("100011002");
msgInfo.setRelatedId("1000110003");
msgInfo.setBody("hello 普通调用");
msgInfo.setType(MsgInfo.Type.TEXT);
msgInfo.setDirect(MsgInfo.Direct.SEND);
msgInfo.setStatus(MsgInfo.Status.SENDING);
msgInfo.setTime(System.currentTimeMillis());

//下面是链式调用
MsgInfo msgInfo = new MsgInfo();
msgInfo.setOwnerId("100011002")
.setRelatedId("1000110003")
.setBody("hello 链式调用")
.setType(MsgInfo.Type.TEXT)
.setDirect(MsgInfo.Direct.SEND)
.setStatus(MsgInfo.Status.SENDING)
.setTime(System.currentTimeMillis());

对比两者优劣
普通:
  1:维护性强
  2:对方法的返回类型无要求
  3:对程序员的业务要求适中
链式:
  1:编程性强
  2:可读性强
  3:代码简洁
  4:对程序员的业务能力要求高
  5:不太利于代码调试

个人觉得链式调用很像装饰模式

你可能感兴趣的:(Android 链式调用(方法链))