定义
- 将一个复杂对象的构建与它的表示分离,使同样的构建过程可创建不同的方式进行建造。
-
角色
Builder(建造者):给出一个抽象接口,规范产品对象的组成成分。规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
- ConcrteBuilder:实现Builder接口,针对不逻辑,具体化复杂对象的各部分的创建。在建造过程完成后,提供产品的实例。
- Director(指挥者):调用具体建造者来创建复杂对象的各个部分,在指导过程中不涉及具体产品的信息,只负责保证对象各部分完整创建或按照某种顺序创建。
-
作用
在用户不知道对象的建造过程和细节的情况下就可直接创建复杂的对象。
-
场景
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
- 隔离复杂对象的创建和使用,并使得相同的创建过程可创建不同的产品;
-
与工厂区别:
建造者更关注零件装配的顺序。
- JAVA中StringBuilder是建造者模式创建的,他把单个字符char数组组合起来。
- String不是建造者。
代码
```java //装备对象 @Data public class Arms{ private String helmet; private String aemor; private String weapon; }
//Builder抽象接口 public interface PersonBuilder{
void builderHelmetMurder();
void builderArmorMurder();
void builderWeaponMurder();
void builderHelmetYanLong();
void builderArmorYanLong();
void builderWeaponYanLong();
Arms BuilderArms();//组装
}
//Builder实现类 public class ArmsBuilder implements PersonBuilder{ private Arms arms;
public ArmsBuilder(){
Arms arms = new Arms();
}
public void builderHelmetMurder() { arms.setHelmet("夺命头盔"); }
public void builderArmorMurder() { arms.setArmor("夺命铠甲"); }
public void builderWeaponMurder() { arms.setWeapon("夺命宝刀"); }
public void builderHelmetYanLong() { arms.setHelmet("炎龙头盔"); }
public void builderArmorYanLong() { arms.setArmor("炎龙铠甲"); }
public void builderWeaponYa
}
//Director public class PersonDirector{
//组装
public Arms constructPerson(PersonBuilder pb){
pb.builderHelmetYanLong();
pb.builderArmorMurder();
pb.builderWeeaponMurder();
return pb.BuilderArms();
}
//测试
public static void main(String[] args){
PersonDirector pb = new PersonDirector();
Arms arms = pb.constructPerson(new ArmsBuilder());
sout(arms.getHelmet());
}
}
```