构造者模式(Builder Pattern)

Posted by Jfson on 2017-07-28
  • 构造者模式(Builder Pattern)

    建造者模式是及其常用的一种设计模式,经常提现在一些开源的三方库中来进行return 当前对象进行链式调用,如果你要开源一个niubility 的库,那么学习一下建造者模式是非常有必要的。

  • 介绍:将一个复杂对象的构建与它的表示分离,用于属性参数很多时。

  • 很多流行框架用到它,举个最典型的Retrofit的使用。

1
2
3
4
5
6
7
// 忽略参数,看下如何使用
Retrofit retrofit = new Retrofit.Builder()
.client(null)
.baseUrl(null)
.addConverterFactory(null)
.addCallAdapterFactory(null)
.build();
  • 创建一个自己的builder 模式类,制作咖啡,需要水,咖啡,加冰多少,加糖多少等变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* Author: jfson
* Create on: 2017/9/20
* Description:
*/
public class Coffee {
public String water; //放多少水
public String coffee; // 放多少咖啡
public String ice; // 多少冰
public String suger; // 多少糖
public Coffee() {
}
public Coffee(Coffee coffee) {
if (coffee == null) {
return;
}
this.water = coffee.water;
this.coffee = coffee.coffee;
this.ice = coffee.ice;
this.suger = coffee.suger;
}
public static final class Builder {
private Coffee mCoffee;
public Builder() {
mCoffee = new Coffee();
}
public Coffee.Builder setWater(String water){
mCoffee.water = water;
return Builder.this;
}
public Coffee.Builder setCoffee(String coffee){
mCoffee.coffee = coffee;
return Builder.this;
}
public Coffee.Builder setIce(String ice){
mCoffee.ice = ice;
return Builder.this;
}
public Coffee.Builder setSuger(String suger){
mCoffee.suger = suger;
return Builder.this;
}
public Coffee build(){
return new Coffee(mCoffee);
}
}
}
  • 使用跟Retrofit方式一样
1
2
3
4
5
6
Coffee coffee = new Coffee.Builder()
.setCoffee("more")
.setIce("no")
.setSuger("no")
.setWater("little")
.build();
  • so,是不是很简单,很酸爽。

pv UV: