定义如下:
Separate the construction of a complex object from its representation so that the same construction process can different representations
将一个复杂对象的构建与它表示分离,是的同样的构建过程可以生成不同对象
类图如下
它一般用在下面两种情况下:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
package Builder;
import java.util.ArrayList;
public interface Builder {
void BuildA();
void BuildB();
Product getProduct(ArrayList<Integer> list);
void BuildC();
}
package Builder;
import java.util.ArrayList;
public class ConcreteBuilder implements Builder {
Part a,b,c ;
Product p;
@Override
public void BuildA() {
// 声明如何创造A
System.out.println("Build a");
}
@Override
public void BuildB() {
// 声明如何创造b
System.out.println("Build b");
}
@Override
public void BuildC() {
// 声明如何创造c
System.out.println("Build c");
}
@Override
public Product getProduct(ArrayList<Integer> list) {
for(int i:list)
{
switch (i){
case 1:
BuildA();
break;
case 2:
BuildB();
break;
case 3:
BuildC();
break;
}
}
System.out.println("Product was build");
return null;
}
}
package Builder;
import java.util.*;
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder=builder;
}
public Product Construct(ArrayList<Integer>list){
Product product= builder.getProduct(list);
return product;
}
public static void main(String [] args){
Builder builder=new ConcreteBuilder();
Director dir=new Director(builder);
ArrayList<Integer> list =new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
dir.Construct(list);
}
}
package Builder;
public interface Part {
}
package Builder;
import java.util.ArrayList;
public interface Product {
}
结果如下
Build a
Build b
Build b
Build c
Product was build
下面来分析一下 本模式的主要意图。把构建复杂对象与它的表示分离,同样的构建过程可以构建不同对象。这里可以看出
Builder 中定义了模版方法
getProduct
并定义了一些实现不同部件的接口,。而ConcreteBuilder 则对其中接口进行了实现。这样不同的ConcreteBuilder 可以生成不同的部件。
其实组装方法可以在Director中定义,本实现是在 Builder中定义,但是接收一个 list 作为参数,用来控制部件的组合方式,两者实现结果相同。
比较 Builder和AbstractFactory 模式
AbstractFactory 是为了创造一组对象。Builder 则是将不同部件的实现与最终产品分离。就拿电脑来说,Builder模式相当于组装机发烧友,可以用不同部件不同型号,装出不同的机器。 更关注于部件。 而AbstractFactory则相当于产生出一组机器。 更关心与一些列产品。