我正在学习建造者模式
在上面的链接(Java 示例)中,我注意到 Builder 提供了构造多个组件的接口。除了调用它们,我们还调用了 getProduct()。
我不明白的一点是,为什么Director需要一个一个调用所有这些组件构造方法并最终得到结果。
/** "Director" */
class Waiter {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) { pizzaBuilder = pb; }
public Pizza getPizza() { return pizzaBuilder.getPizza(); }
public void constructPizza() {
pizzaBuilder.createNewPizzaProduct();
pizzaBuilder.buildDough(); // construct component 1
pizzaBuilder.buildSauce(); // construct component 2
pizzaBuilder.buildTopping(); // construct component 3
}
}
为什么不将构建组件1、2、3的代码包含在它自己的ConcreteBuilder类中而不是Director中,实际上去掉Director层。
我知道上述方法可能会将 Builder 模式转变为其他模式,但我不明白 Director 为何要一步一步地完成这项工作。有什么好处?如果有多个导演,就会有重复的代码,对吧?我可能不理解执行构建器模式背后的动机......
更新:构建器模式是否专注于在创建更大的复杂对象时提供可定制的组件选择?否则,截至目前,我没有看到引入额外层 Director 的意义。
即使是这样,装饰器模式也可能是一个更好的主意,通过动态自定义组件来完成同样的任务。在某个地方我错过了 Builder 背后的要点.. :(