Builder是为创建一个Product对象的各个部件指定的抽象接口。
ConcreateBuilder是具体建造者,实现了Builder接口,构造和装配各个部件。
Product就是指产品角色。
Director是指挥者,它是构建一个使用Builder接口的对象。
建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
上代码:
public class Product {
List<String> list = new ArrayList<String>();
public void Add(String part){
list.add(part);
}
public void Show (){
for (String part : list) {
System.out.println(part);
}
}
}
public abstract class Builder {
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product getResult();
}
public class ConcreteBuilderA extends Builder {
private Product product = new Product();
@Override
public void BuildPartA() {
product.Add("AA");
}
@Override
public void BuildPartB() {
product.Add("AB");
}
@Override
public Product getResult() {
return product;
}
}
public class ConcreteBuilderB extends Builder {
private Product product = new Product();
@Override
public void BuildPartA() {
product.Add("BA");
}
@Override
public void BuildPartB() {
product.Add("BB");
}
@Override
public Product getResult() {
return product;
}
}
//指挥者类
public class Director {
//组装方法
public void Construct(Builder builder){
builder.BuildPartA();
builder.BuildPartB();
}
}
public class StartMain {
public static void main(String[] args) {
Director director = new Director();
Builder builder1 = new ConcreteBuilderA();
Builder builder2 = new ConcreteBuilderB();
director.Construct(builder1);
Product p1 = builder1.getResult();
p1.Show();
director.Construct(builder2);
Product result = builder2.getResult();
result.Show();
}
}
结果:
AA
AB
BA
BB
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。