创建者模式和工厂模式有点类似,不过关注点不同。工厂模式往往只关心你要的是什么,二不关心这个东西的具体细节是什么。而创建模式则关心的是这个东西的具体细节的创建。拿创建人物来说,我们关心的不仅是创建一个人物,还要关心他的性别,肤色和名字,则可以使用创建者模式:
package builder;
/**
*
* DOC 种族角色
*
*/
public class Race {
private String name;// 名字
private String skinColor;// 肤色
private String sex;// 性别
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSkinColor() {
return this.skinColor;
}
public void setSkinColor(String skinColor) {
this.skinColor = skinColor;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package builder;
/**
*
* DOC 我们关心的不仅仅是创建一个人物,还要关心其特征的创建
*
*/
public class RaceBuilder {
private Race race;
/**
* DOC 创建一个种族
*
* @return
*/
public RaceBuilder builder() {
this.race = new Race();
return this;
}
/**
* DOC 取名字
*
* @return
*/
public RaceBuilder setName(String name) {
this.race.setName(name);
return this;
}
/**
* DOC 选择性别
*
* @return
*/
public RaceBuilder setSex(String sex) {
this.race.setSex(sex);
return this;
}
/**
* DOC 选择肤色
*
* @return
*/
public RaceBuilder setSkinColor(String skinColor) {
this.race.setSkinColor(skinColor);
return this;
}
/**
*
* DOC 返回这个创建好的种族
*
* @return
*/
public Race create() {
return this.race;
}
}
测试类:
package builder;
public class Main {
public static void main(String[] args) {
Race race = new RaceBuilder().builder().setName("张三").setSex("男").setSkinColor("白色").create();
}
}