一、定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(实例:建造人对象,头,手,胸,肚子,脚)
二、结构图
三、代码示例
1、测试代码Action.java
/**
* 测试建造者模式
* @author lattice
*
*/
public class Action {
public static void main(String[] args) {
ConcreteBuilderA cBuilder=new ConcreteBuilderA();
Director.directBuilder(cBuilder);
Product product=cBuilder.getResult();
product.show();
/**
* 输出结果:
产品创建:
部件1
部件2
*/
}
}
2、需要建造的产品类Product.java
import java.util.ArrayList;
import java.util.List;
/**
* 需要建造的产品类
*
* @author lattice
*
*/
public class Product {
List<String> parts = new ArrayList<String>();
public void addPart(String part) {
parts.add(part);
}
public void show() {
System.out.println("产品创建:");
for (String part : parts) {
System.out.println(part);
}
}
}
/**
* 建造者抽象类
*
* @author lattice
*
*/
abstract class Builder {
public abstract void buildPartA();
public abstract void buildPartB();
public abstract Product getResult();
}
/**
* 具体建造者抽象类A
*
* @author lattice
*
*/
class ConcreteBuilderB extends Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.addPart("部件A");
}
@Override
public void buildPartB() {
product.addPart("部件B");
}
@Override
public Product getResult() {
return this.product;
}
}
/**
* 具体建造者抽象类B
*
* @author lattice
*
*/
class ConcreteBuilderA extends Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.addPart("部件1");
}
@Override
public void buildPartB() {
product.addPart("部件2");
}
@Override
public Product getResult() {
return this.product;
}
}
/**
* 建造者智慧类
* @author lattice
*
*/
class Director {
public static void directBuilder(Builder builder) {
builder.buildPartA();
builder.buildPartB();
}
}