- 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的的表示。
- 工厂类模式是提供的是创建单个类的产品,而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品,建造者模式更加关注与零件装配的顺序。
建造者模式通常包括下面几个角色:
- Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
- ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
- Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
- Product:要创建的复杂对象。
使用场景:
- 需要生成的对象具有复杂的内部结构。
- 需要生成的对象内部属性本身相互依赖。
代码案例
建立一个装备对象Arms
//装备类public class Arms {//头盔private String helmet;//铠甲private String armor;//武器private String weapon;//省略Git和Set方法...........}
创建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;//创建一个Arms实例,用于调用set方法public ArmsBuilder() {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 builderWeaponYanLong() {arms.setWeapon("炎龙宝刀");}public Arms BuilderArms() {return arms;}}
Director(调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建)
public class PersonDirector {//组装public Arms constructPerson(PersonBuilder pb) {pb.builderHelmetYanLong();pb.builderArmorMurder();pb.builderWeaponMurder();return pb.BuilderArms();}//这里进行测试public static void main(String[] args) {PersonDirector pb = new PersonDirector();Arms arms = pb.constructPerson(new ArmsBuilder());System.out.println(arms.getHelmet());System.out.println(arms.getArmor());System.out.println(arms.getWeapon());}}
