建造者模式用于创建一些复杂对象,这些对象内部构件间的建造顺序通常是稳定的,但对象内部的构建通常面临
着复杂的变化。 ————摘自《大话设计模式》
基本结构如下:
①、产品,想要创建的复杂对象
②、抽象建造者
各个构件的抽象建造方法
得到产品的抽象方法
③、指挥者,指挥建造者
封装建造顺序的方法(产品的构建顺序,构件A-->构件B-->构件C)
④、具体建造者,继承抽象构造者
各个构件的具体生成方法
得到产品的方法
⑤、调用者
建造者创建出产品所需全部构件
指挥者调用构建方法
得到产品
示例代码:
①、产品#########################################
/**
* 产品类
*/
public class Product {
private List<String> parts = new ArrayList<String>();
/**
* 产品组装
*/
public void add(String part){
parts.add(part);
}
/**
* 产品展示
*/
public void show(){
if(parts.size()>0){
System.out.print("产品结构组成:");
for(String part:parts){
System.out.print("\t"+part);
}
System.out.print("\n");
}
}
}
②、抽象建造者#########################################
/**
* 抽象建造类,假设产品包括部件1、部件2两部分
*/
public abstract class Builder {
public abstract void buildPart1(); //建造构件1
public abstract void buildPart2(); //建造构件2
public abstract Product getResult(); //得到产品
}
③、指挥者#########################################
/**
* 指挥者,指挥建造者建造(封装建造算法)
*/
public class Director {
public void construct(Builder builder){ //控制建造次序
builder.buildPart2();
builder.buildPart1();
}
}
④、具体建造者#########################################
/**
* 具体建造者一,建造A、B构件
*/
public class ConcreteBuilder1 extends Builder {
private Product p = new Product();
@Override
public void buildPart1() {
p.add("构件A");
}
@Override
public void buildPart2() {
p.add("构件B");
}
@Override
public Product getResult() {
return p;
}
}
/**
* 具体建造者2,建造X、Y构件
*/
public class ConcreteBuilder2 extends Builder {
private Product p = new Product();
@Override
public void buildPart1() {
p.add("构件X");
}
@Override
public void buildPart2() {
p.add("构件Y");
}
@Override
public Product getResult() {
return p;
}
}
⑤、调用者#########################################
public class Test {
public static void main(String[] args) throws Exception {
Director d = new Director(); //指挥者
Builder b1 = new ConcreteBuilder1(); //建造者
d.construct(b1); //建造次序
Product p1 = b1.getResult(); //得到产品
p1.show();
}
}
运行结果为: