Java的創建者模式與工廠模式有點類似,不過關注點不同。工廠模式往往只關心你要的是什麼,而不關心這個東西的具體細節是什麼。相對而言創建模式則是關心這個東西的具體細節的創建。拿創建人物來說,我們關心的不僅是創建一個人物,還要關心他的性別,膚色和名字,則可以使用創建者模式。
程序實例如下所示:
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();
}
}