java设计模式之建造者模式

①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));
}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值