设计模式的实质是面向接口的编程;而面向接口可以使得接口的调用者独立于接口的具体实现细节。
因为实现细节可以有多种多样,通过接口的使用,我们就可以把这些实现的变换封装起来,成为一个可替换的模块。
在builder模式下,有以下几类角色:
Director, AbstractBuilder, ConcreteBuider1, ConcreteBuiler2,..., Product= { part1, part2,...,}
要实现封装变化点,就要现分析设计中那些是需要能灵活变化的,以提高程序的灵活性和扩展性,而哪些又是固定不变的。
具体来说,在Builder模式中,
Director对一件产品的需要和构造的流程是不变的。
注意点:
1:Builder模式强调的是对某一件特定产品的构造,而不是多种产品。
2:这一特定产品是有一系列部件所组成的一个复杂对象,
3:变化点:各个部件的具体细节是各不相同的,但他们具有公共的接口;
4:固定点:各个部件的装配过程、顺序、关系是相对固定的,但具体针对某一特定部件的装配的方式方法是不一样的(所以,才会对应于不同的Builder)
所以:
1:director只应该拥有AbstractBuilder,以适应装配方法或装配对象的变化
2:AbstractBuilder也只拥有Product的接口,以适应不同产品的需要
3:Product 也只拥有部件Part的接口,以适应不同部件的需要。
(这里,也用到了桥接模式)
注意:在获取足够的设计上的灵活性的同时,也会付出项目变复杂的代价,所以,要注意权衡。