①UML设计
②定义以及使用场景:一个产品的构建过程和它的表示分离,使得同样的构建过程有不同的表示
③示例:定义一个玩具角色类ToysCharacter,定义一个玩具角色建造抽象类ToysCharacterBuilder,定义两个具体实现类WarriorToysBuilder(战士玩具),WizardToysBuilder(巫师玩具),角色控制类ToysCharactorController
public class ToysCharacter{
//角色类型
private String type;
//角色性别
private String gender;
//角色脸型
private String face;
//角色发型
private String hairStyle;
getter && setter...
}
public abstract class ToysCharacterBuilder{
protected ToysCharacter character = new ToysCharacter();
public abstract void buildType();
public abstract void buildGender();
public abstract void buildFace();
public abstract void buildHairStyle();
//得到玩具对象
public ToysCharacter getToysCharactor(){
return character;
}
}
public class WarriorToysBuilder extends ToysCharacterBuilder{
@Override
public void buildType(){
character.setType("warrior");
}
@Override
public void buildGender(){
character.setGender("male");
}
@Override
public void builFace(){
character.setFace("handsome");
}
@Override
public void buildHairStyle(){
character.setHairStyle("short-hair");
}
}
public class WizardToysBuilder extends ToysCharacterBuilder{
@Override
public void buildType(){
character.setType("wizard");
}
@Override
public void buildGender(){
character.setGender("female");
}
@Override
public void buildFace(){
character.setFace("pretty");
}
@Override
public void buildHairStyle(){
character.setHairStyle("long-hair");
}
}
public class ToysCharacterController{
public ToysCharacter create(ToysCharacterBuilder builder){
builder.buildType();
builder.buildGender();
builder.buildFace();
builder.buildHairStyle();
return builder.getToysCharactor();
}
}
public class Test{
public static void main(String args[]){
ToysCharacterController tc= new ToysCharacterController();
ToysCharacter warrior = tc.create(new WarriorToysBuilder());
ToysCharacter wizard = tc.create(new WizardToysBuilder());
System.out.println(FastJsonUtils.toJSONString(warrior));
System.out.println(Fast.JsonUtils.toJSONString(wizard));
}
}