前言:
以前在做Android项目中,无论是网络加载框架还是图片加载框架,经常使用到链式调用。如下:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(“https://api.github.com/”)
.build();
Glide.with(this).load(imageUrl)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(imageView);
于是决定开始做一个链式调用的建造者模式
产品类:
package com.yuanshi.eryu;
/**
* 生成猿狮这个产品类
*/
public class YuanShi {
// 产品类中的部件
private String java;
private String python;
public YuanShi builders(Builder builder) {
this.java=builder.java;
this.python=builder.python;
return this;
}
@Override
public String toString() {
return "猿狮 [java=" + java + ", python=" + python + "]";
}
static class Builder {
private String java;
private String python;
public Builder setJava(String java) {
this.java = java;
return this;
}
public Builder setPython(String python) {
this.python = python;
return this;
}
}
}
具体的Builder类:
package com.yuanshi.eryu;
/**
* 具体的Builder类
*/
public class YSBuilder {
// 创建YuanShi与YuanShi.Builder的实例
YuanShi yuanshi = new YuanShi();
YuanShi.Builder builder = new YuanShi.Builder();
// 声明dojava 方法
public YSBuilder doJava(String java) {
this.builder.setJava(java);
return this;
}
// 声明doPython的方法
public YSBuilder doPython(String python) {
this.builder.setPython(python);
return this;
}
// 用于返回YuanShi对象
public YuanShi build() {
// TODO Auto-generated method stub
return yuanshi.builders(builder);
}
}
客户端类:
package com.yuanshi.eryu;
/**
* 客户端类
*/
public class Client {
public static void main(String[] args) {
YuanShi build = new YSBuilder().doJava("android").doPython("bigdata").build();
System.out.println(build.toString());
}
}
结果的显示:
与传统的建造者模式相比,省去了指挥者类,客户提出需求后,具体的Builder自己来完成相应的功能。、