责任链:
责任链的含义为一组处理相关事务的执行链,该链上存在者许多节点,每个节点都会映射到具体请求事务上。如果处理完一个节点后那么该节点将持有整个对象的引用传递到下一个节点上直至处理完毕。
使用责任链的优点是简化了对象对外暴露的细节,使其内部更加隐蔽;增强了对象指派职责的灵活性,允许动态地增加或减少责任链。但它的缺点也是显而易见的,就是请求不一定能够被接受,因此节点必须要做好这些条件下的处理。
通常在网络请求里面最容易见到使用责任链模式的框架,如OkHttp、Alamofire等。下面就Android中的OkHttp我们模拟出一个网络请求的示例。
代码:
public class OakHttp {
public final String url;
public final String header;
public final String language;
public OakHttp(){
this(new Builder());
}
public OakHttp(Builder builder){
this.url = builder.url;
this.header = builder.header;
this.language = builder.language;
}
public String getURL() {
return url;
}
public String getHeader(){
return header;
}
public String getLanguage(){
return language;
}
public Builder newBuilder(){
return new Builder(this);
}
@Override
public String toString(){
return "OakHttp{" +
"url=" + url + ",header=" + header + ",language=" + language + "}";
}
public static class Builder{
public String url;
public String header;
public String language;
public Builder(){
url = url;
header = header;
language = language;
}
Builder(OakHttp oakHttp){
this.url = url;
this.header = header;
this.language = language;
}
public Builder setURL(String url){
this.url = url;
return this;
}
public Builder setHeader(String header){
this.header = header;
return this;
}
public Builder setLanguage(String language){
this.language = language;
return this;
}
public OakHttp build(){
return new OakHttp(this);
}
}
}
使用:
OakHttp oakHttp = new OakHttp.Builder()
.setURL("https://www.baidu.com")
.setHeader("FireFox")
.setLanguage("Chiness")
.build();
System.out.println(oakHttp.toString());