什么是建造者模式( 摘自百度百科)
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
啥意思呢
比如你要创建一个女朋友,他有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据自己的喜好去建造不同的女朋友,我们不需要关系她是怎么建造的,我们只需要去指定她的属性就行了
相比如文字解释,我更习惯撸代码来解释,下面来一步步实现怎么用建造者模式来为你创建一个女朋友
首先定义一个女朋友类
package duanlian.buildlerdemo;
/**
* Created by ${DuanLian} on 2017/4/24.
*/
public class GirlFriend {
private String sex;//性别
private int age;//年龄
private int stature;//身高
private int weight;//体重
private String type;//类型
}
按照我们以往的理解,要创建一个女朋友是不是要直接new出来,我们可以通过构造方法把属性传过去
例如:我对女朋友的要求只有一个,是女的就行,定义一个构造方法:
public GirlFriend(String sex) {
this.sex = sex;
}
然后再需要的时候来创建她:
GirlFriend girlFriend = new GirlFriend("女");
如果我们要求性别和身高就要定义:
public GirlFriend(String sex, int stature) {
this.sex = sex;
this.stature = stature;
}
你想想每个人的要求都不一样,你得创建多少个构造方法,而且参数多了,可读性很差比如:
GirlFriend girlFriend = new GirlFriend("女",22,170,100,"萝莉型");
你不点击去看源码,你怎么知道这些个参数是什么意思
下面我们用建造者模式来实现这个
建造一个GirlFriendBuilder类
package duanlian.buildlerdemo;
/**
* Created by ${DuanLian} on 2017/4/24.
*/
public class GirlFriendBuilder {
String sex;//性别
int age;//年龄
int stature;//身高
int weight;//体重
String type;//类型
public GirlFriendBuilder setSex(String sex) {
this.sex = sex;
return this;
}
public GirlFriendBuilder setAge(int age) {
this.age = age;
return this;
}
public GirlFriendBuilder setStature(int stature) {
this.stature = stature;
return this;
}
public GirlFriendBuilder setWeight(int weight) {
this.weight = weight;
return this;
}
public GirlFriendBuilder setType(String type) {
this.type = type;
return this;
}
/**
*返回一个GirlFriend对象
*/
public GirlFriend build() {
return new GirlFriend(this);
}
}
然后再GirlFriend类里面构造方法传入GirlFriendBuilder对象
public GirlFriend(GirlFriendBuilder builder) {
this.sex = builder.sex;
this.age = builder.age;
this.stature = builder.stature;
this.weight = builder.weight;
this.type = builder.type;
}
然后创建的时候:
GirlFriend girlFrie1nd = new GirlFriendBuilder()
.setAge(22)
.setSex("女")
.setType("萝莉型")
.setStature(165)
.build();
这样就成功创建了一个女朋友,代码的可读性也高了
有不对的地方,请指正