建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
1. Builder:建造者抽象接口类,为创建一个产品对象的各个部件指定的抽象接口。
2. ConcreteBuilder:具体建造者,实现Builder接口,构造和装配各个部件。
3. Product:产品类,具体的产品角色
4. Director:指挥者类,构建一个使用Builder接口的对象
/**
* 产品类:由具体的部件组成。
*
*/
public class Product {
public List<String> parts = new ArrayList<String>();
// 添加产品部件
public void add(String part){
parts.add(part);
}
//列出所有的产品部件
public void show(){
System.out.println("----产品创建-----");
for(String part:parts){
System.out.println(part);
}
}
}
/**
* 抽象建造者类
*
*/
public abstract class Builder {
//确定产品由二个部件组成:partA和partB
public abstract void builderA();
public abstract void builderB();
public abstract Product getResult();
}
/**
* 具体建造者类1(建造两个具体的部件是A和B)
*
*/
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
@Override
public void builderA() {
product.add("部件A");
}
@Override
public void builderB() {
product.add("部件B");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 具体建造者类2(建造两个具体的部件是X和Y)
*
*/
public class ConcreteBuilder2 extends Builder{
private Product product = new Product();
@Override
public void builderA() {
product.add("部件X");
}
@Override
public void builderB() {
product.add("部件Y");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 指挥者类,用来控制建造过程,也用来隔离用户与建造过程的关联。
*
*/
public class Director {
public void construct(Builder builder){
builder.builderA();
builder.builderB();
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Director director = new Director();
ConcreteBuilder1 c1 = new ConcreteBuilder1();
ConcreteBuilder2 c2 = new ConcreteBuilder2();
// 用concreteBuilder1的方法创建产品
director.construct(c1);
Product product = c1.getResult();
product.show();
// 用concreteBuilder2的方法创建产品
director.construct(c2);
product = c2.getResult();
product.show();
}
}