建造者模式
定义:建造者模式(Builder Pattern)(或叫生成器模式),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(只需要给出指定复杂对象的类型和内容)。用户不需知道对象的建造过程的细节就可以直接创建复杂的对象。
结构图:
Director:构建一个使用Builder接口的对象。
Builder:建造者,提供建造的具体方法的接口。
ConcreteBuilder:具体建造者,实现Builder接口。
Product:具体产品。
例:
public class House { // Product private String style; private float cost; public House() { } // getter/setter省略 }
public interface Builder { // Builder void buildHouse(); House getHouese(); }
public class ConcreteBuilder1 implements Builder { // ConcreteBuilder1建造中式洋房的建造商 private House house = new House(); @Override public void buildHouse() { house.setStyle("中式洋房"); house.setCost(100); } @Override public House getHouese() { return house; } }
public class ConcreteBuilder2 implements Builder{ // ConcreteBuilder2建造西式洋房的建造商 private House house = new House(); @Override public void buildHouse() { house.setStyle("西式洋房"); house.setCost(150); } @Override public House getHouese() { return house; } }
public class Developer { // Director public void build(Builder builder) { // 指挥具体建造商建造 builder.buildHouse(); builder.getHouese(); } }
public class Test { public static void main(String[] args){ ConcreteBuilder1 concreteBuilder1 = new ConcreteBuilder1(); // 中式洋房建造商 ConcreteBuilder2 concreteBuilder2 = new ConcreteBuilder2(); // 西式洋房建造商 Developer developer = new Developer(); // 开发商 // 开发商指挥中式洋房建造商建造(开发商不需要知道具体建造过程) developer.build(concreteBuilder1); House house1 = concreteBuilder1.getHouese(); System.out.println(house1.getStyle()); System.out.println(house1.getCost()); // 开发商指挥西式洋房建造商建造(开发商不需要知道具体建造过程) developer.build(concreteBuilder2); House house2 = concreteBuilder2.getHouese(); System.out.println(house2.getStyle()); System.out.println(house2.getCost()); } }
输出:
中式洋房 100.0 西式洋房 150.0