建造者模式
又叫生成器模式,它可以将复杂对象的建造过程抽象出来,然后把这个抽象过程个性化的任务交给子类。用户只需要指定个性化类型即可,不需要内部的具体构建细节。
它有四个roles :
(1)Client (用户)
(2)Builder (抽象建造者)
(3)ConcreteBuilder (具体建造者)
(4)Director (指挥者)构建一个使用Builder接口的对象,隔离了客户与对象的生产过程,负责控制产品对象的生产过程。
Builder模式的UML:
举个栗子:
有家面馆有两个厨师,一个负责炒面,一个负责蒸面,实现顾客点餐的功能。
此时,服务员帮顾客点餐就是Director,两个负责具体功能的厨师就是ConcreteBuilder,共同继承Builder接口或抽象类,而顾客就是我们测试时的Main类。
代码实现:
public abstract class NoodleBuilder { public abstract void buildPart1(); public abstract void buildPart2(); } //具体的构建者 public class FriedNoodleBuilder extends NoodleBuilder{ @Override public void buildPart1() { System.out.println("准备牛肉,面"); } @Override public void buildPart2() { System.out.println("炒面"); } } public class SteamedNoodleBuilder extends NoodleBuilder{ @Override public void buildPart1() { System.out.println("准备猪肉,面"); } @Override public void buildPart2() { System.out.println("蒸面"); } } public class Director { private NoodleBuilder builder; Director(NoodleBuilder builder){ this.builder = builder; } public void construct(){ builder.buildPart1(); builder.buildPart2(); } } public class Main { public static void main(String[] args) { //比如顾客现在想要牛肉炒面 //我们找到服务员director,director就去找了炒面厨师FriedNoodleBuilder Director director = new Director(new FriedNoodleBuilder()); //然后开始构建炒面 director.construct(); } }
总结
代码中Director类是不知道Builder的具体实现子类的,一切按照客户的需求来。正是不知道才能够替换,正是因为能够替换,组件才具有高价值。