• 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的的表示。
    • 工厂类模式是提供的是创建单个类的产品,而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品,建造者模式更加关注与零件装配的顺序。

    建造者模式通常包括下面几个角色:

    • Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
    • ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
    • Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
    • Product:要创建的复杂对象。

    使用场景:

    1. 需要生成的对象具有复杂的内部结构。
    2. 需要生成的对象内部属性本身相互依赖。

    代码案例

    1. 建立一个装备对象Arms

      1. //装备类
      2. public class Arms {
      3. //头盔
      4. private String helmet;
      5. //铠甲
      6. private String armor;
      7. //武器
      8. private String weapon;
      9. //省略Git和Set方法...........
      10. }
    2. 创建Builder接口(给出一个抽象接口,以规范产品对象的各个组成成分的建造,这个接口只是规范)

      1. public interface PersonBuilder {
      2. void builderHelmetMurder();
      3. void builderArmorMurder();
      4. void builderWeaponMurder();
      5. void builderHelmetYanLong();
      6. void builderArmorYanLong();
      7. void builderWeaponYanLong();
      8. Arms BuilderArms(); //组装
      9. }
    3. 创建Builder实现类(这个类主要实现复杂对象创建的哪些部分需要什么属性)

      1. public class ArmsBuilder implements PersonBuilder {
      2. private Arms arms;
      3. //创建一个Arms实例,用于调用set方法
      4. public ArmsBuilder() {
      5. arms = new Arms();
      6. }
      7. public void builderHelmetMurder() {
      8. arms.setHelmet("夺命头盔");
      9. }
      10. public void builderArmorMurder() {
      11. arms.setArmor("夺命铠甲");
      12. }
      13. public void builderWeaponMurder() {
      14. arms.setWeapon("夺命宝刀");
      15. }
      16. public void builderHelmetYanLong() {
      17. arms.setHelmet("炎龙头盔");
      18. }
      19. public void builderArmorYanLong() {
      20. arms.setArmor("炎龙铠甲");
      21. }
      22. public void builderWeaponYanLong() {
      23. arms.setWeapon("炎龙宝刀");
      24. }
      25. public Arms BuilderArms() {
      26. return arms;
      27. }
      28. }
    4. Director(调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建)

      1. public class PersonDirector {
      2. //组装
      3. public Arms constructPerson(PersonBuilder pb) {
      4. pb.builderHelmetYanLong();
      5. pb.builderArmorMurder();
      6. pb.builderWeaponMurder();
      7. return pb.BuilderArms();
      8. }
      9. //这里进行测试
      10. public static void main(String[] args) {
      11. PersonDirector pb = new PersonDirector();
      12. Arms arms = pb.constructPerson(new ArmsBuilder());
      13. System.out.println(arms.getHelmet());
      14. System.out.println(arms.getArmor());
      15. System.out.println(arms.getWeapon());
      16. }
      17. }