声明
写这篇文章主要是在翻阅其他文章后理解并做做笔记,方便理解记忆,如果说的不正确请大佬指出,在可以让我重新了解的同时也可以防止误导阅读人员
原因
最近在看关于如果自己写一个Gilde的教程,文章中突然调到了我们使用Glide方法是链式调用的方式,
然后我就开始如查阅链式调用如果实现。发现我们使用的建造者模式就是使用链式调用方法。而最终发现实现的最根本就是要返回对象。
什么是链式调用
链式调用其实只不过是一种语法招数。它能让你通过重用一个初始操作来达到用少量代码表达复杂操作的目的。
以类名.方法().方法().方法()
使用方法 以Glide为例子
//以类名.方法().方法().方法()
Glide.with(context).load(imgStr).apply(options).into((ImageView) view);
优劣
1:编程性强
2:可读性强
3:代码简洁
4:对程序员的业务能力要求高
5:不太利于代码调试
重点
下面这一句是最根本的,记住这一步,我会通过两个例子来说明
//java链式调用的重点
return this;
基础封装类1
public class ChainDemo{
private int num;
private String name;
public ChainDemo(){
}
public int getNum(){
return num;
}
public void setNum(int num){
this.num = num;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public void test(){
System.out.println("尝试销声匿迹,却发现真的无人问津");
}
public void test2(int num){
this.num = num;
System.out.println("晚安背后的语句,无");
}
}
调用方法
ChainDemo cd = new ChainDemo();
cd.setNum(1);
cd.setName("HABIN2")
cd.test();
cd.test(1);
对比版1
public class ChainDemo{
private int num;
private String name;
public ChainDemo(){
}
public int getNum(){
return num;
}
public ChainDemo setNum(int num){
this.num = num;
//此处返回当前这个对象,以便在再次调用下一个方法
return this;
}
public String getName(){
return name;
}
public ChainDemo setName(String name){
this.name = name;
return this;
}
public ChainDemo test(){
System.out.println("尝试销声匿迹,却发现真的无人问津");
return this;
}
public ChainDemo test2(int num){
this.num = num;
System.out.println("晚安背后的语句,无");
return this;
}
}
调用对比
ChainDemo cd = new ChainDemo();
cd.setNum(1).cd.setName("HABIN2").cd.test().cd.test(1);
开始的时候说过,建造者模式就是使用链式链式调用,比如我们网络访问框架OkHttpClient
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(DEFAULT_CONNECT_TIME, TimeUnit.SECONDS)//连接超时时间
.writeTimeout(DEFAULT_WRITE_TIME, TimeUnit.SECONDS)//设置写操作超时时间
.readTimeout(DEFAULT_READ_TIME, TimeUnit.SECONDS)//设置读操作超时时间
.build();
我们可以进入 connectTimeout看下源代码
public Builder connectTimeout(long timeout, TimeUnit unit) {
connectTimeout = checkDuration("timeout", timeout, unit);
//最终是返回this 也就是当前对象 三个方法都是有返回Builder对象
return this;
}
public Builder writeTimeout(long timeout, TimeUnit unit) {
writeTimeout = checkDuration("timeout", timeout, unit);
return this;
}
public Builder readTimeout(long timeout, TimeUnit unit) {
readTimeout = checkDuration("timeout", timeout, unit);
return this;
}
总结
以上是我对java链式调用的一些理解,如果有什么说的不好请见谅哈哈哈,好好学习,加油!!!!有问题的大佬可以指出。