一、定義
將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。(實例:建造人對象,頭,手,胸,肚子,腳)
二、結構圖
三、代碼示例
/**
* 測試建造者模式
* @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
*/
}
}
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();
}
}