《android总结之链式调用(方法链)》由会员分享,可在线阅读,更多相关《android总结之链式调用(方法链)(7页珍藏版)》请在金锄头文库上搜索。
1、Android 总结之链式调用 (方法链)前言:最近在学习总结 Android 属性动画的时候,发现 Android 的属性动画设计采用了链式调用的方式,然后又回顾了一下了以前接触的开源框架 Glide 也是采用链式调用的方式,还有最近火的一塌糊涂的 RxJava 也是采用链式调用,为何如此之多的开源项目采用这种设计方式,今天来对比学习一下。什么是链式调用?链式调用其实只不过是一种语法招数。它能让你通过重用一个初始操作来达到用少量代码表达复杂操作的目的。表现形式:一个初始化操作之后,后面的调用以“.”连接起来。例如 Glide 使用Glide.with(this).load(imageUrl)
2、.placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);实际举例:以以前做的简单的 IM 即时通讯消息体 MsgInfo 为例。1.)普通实现方式MsgInfo.java 实现方式复制代码public class MsgInfo /* 消息的类型*/public static class Type public final static int TEXT = 0; / 文本消息public final static int IMAGE = 1; / 图片消息public final stati
3、c int VOICE = 2; / 语音消息public final static int MOVIE = 3;/ 视频消息public final static int URL = 4;/URL 消息/* 消息的方向*/public static class Direct public final static int SEND = 0; / 发送public final static int RECEIVE = 1; / 接收 /* 消息的状态*/public static class Status public final static int SEND_SUCCESS= 0; / 已
4、发送public final static int SENDING = 1; / 正在发送public final static int SEND_FAILED = 2; / 发送失败public final static int READ = 3; / 已读public final static int UNREAD = 4; / 未读private long msgId;/消息 Idprivate String ownerId;/消息属于哪个用户private String relatedId;/消息关联到哪个用户;private String body;/消息体private long
5、time;/消息发送接收时间private int direct;/ 消息的方向private int status;/消息的状态private int type;/消息的类型public MsgInfo() public long getMsgId() return msgId;public void setMsgId(long msgId) this.msgId = msgId;public int getType() return type;public void setType(int type) this.type = type;public String getOwnerId()
6、return ownerId;public void setOwnerId(String ownerId) this.ownerId = ownerId;public String getRelatedId() return relatedId;public void setRelatedId(String relatedId) this.relatedId = relatedId;public String getBody() return body;public void setBody(String body) this.body = body;public long getTime()
7、 return time;public void setTime(long time) this.time = time;public int getDirect() return direct;public void setDirect(int direct) this.direct = direct;public int getStatus() return status;public void setStatus(int status) this.status = status;复制代码调用方式复制代码MsgInfo msgInfo = new MsgInfo();msgInfo.set
8、OwnerId(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();复制代码2.)链式调用方式MsgInfo.java 实现复制代码public class MsgInfo /* 消息的类
9、型*/public static class Type public final static int TEXT = 0; / 文本消息public final static int IMAGE = 1; / 图片消息public final static int VOICE = 2; / 语音消息public final static int MOVIE = 3;/ 视频消息public final static int URL = 4;/URL 消息/* 消息的方向*/public static class Direct public final static int SEND = 0;
10、/ 发送public final static int RECEIVE = 1; / 接收/* 消息的状态*/public static class Status public final static int SEND_SUCCESS= 0; / 已发送public final static int SENDING = 1; / 正在发送public final static int SEND_FAILED = 2; / 发送失败public final static int READ = 3; / 已读 public final static int UNREAD = 4; / 未读pri
11、vate long msgId;/消息 Idprivate String ownerId;/消息属于哪个用户private String relatedId;/消息关联到哪个用户;private String body;/消息体private long time;/消息发送接收时间private int direct;/ 消息的方向private int status;/消息的状态private int type;/消息的类型public MsgInfo() public long getMsgId() return msgId;public MsgInfo setMsgId(long msg
12、Id) this.msgId = msgId;return this;public int getType() return type;public MsgInfo setType(int type) this.type = type;return this;public String getOwnerId() return ownerId;public MsgInfo setOwnerId(String ownerId) TnerId = ownerId;return this;public String getRelatedId() return relatedId; public Msg
13、Info setRelatedId(String relatedId) this.relatedId = relatedId;return this;public String getBody() return body;public MsgInfo setBody(String body) this.body = body;return this;public long getTime() return time;public MsgInfo setTime(long time) this.time = time;return this;public int getDirect() retu
14、rn direct;public MsgInfo setDirect(int direct) this.direct = direct;return this;public int getStatus() return status;public MsgInfo setStatus(int status) this.status = status;return this;复制代码调用方式复制代码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();复制代码3.)对比两者优劣普通:1:维护性强2:对方法的返回类型无要求 3:对程序员的业务要求适中链式:1:编程性强2:可读性强3:代码简洁4:对程序员的业务能力要求高5:不太利于代码调试