应用场景
对生成对象进行链式配置
好处:按需配置对象,灵活修改默认配置,比构造方法创建对象更直观。
public static void init() {
if (okHttpClient == null) {
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.writeTimeout(5000, TimeUnit.MILLISECONDS);
okHttpClient = builder.build();
}
}
1
2
3
4
5
6
7
8
9
实现过程
1.创建目标对象Course
2.创建目标对象的【建造者】内部类
3.内部类拥有Course的同名成员变量,并提供build()方法返回Course对象,这里直接使用构造方法构造。
// 内部类处理应用层传入的参数
public static class CourseBuilder{
private String courseName;
private String coursePPT;
// build()返回Course,用作链式调用的最后一步
public Course build() {
// 需要建立一个参数为CourseBudiler的构造方法
return new Course(this);
}
//
public CourseBuilder buildCourseName(String courseName) {
this.courseName = courseName;
return this;
}
public CourseBuilder buildCoursePPT(String coursePPT) {
this.coursePPT = coursePPT;
return this;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 应用层.build()后调用该构造方法
public Course(CourseBuilder courseBuilder) {
this.courseName = courseBuilder.courseName;
this.coursePPT = courseBuilder.coursePPT;
}
1
2
3
4
5
使用
public static void main(String[] args) {
Course course = new Course.CourseBuilder(http://www.my516.com)
.buildCourseName("Java设计模式")
.buildCoursePPT("PPT")
//可拓展.buildCourseArticle("Article")
//可拓展.buildCourseVideo("Video")
.build();
}
---------------------