摘抄《C#大話設計模式》
建造者模式(Bulider) : 講一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
建造者模式的結構圖如下:
建造者模式的基本代碼:
Product類——產品類,由多個部件組成。
package com.schema.builder;
import java.util.ArrayList;
import java.util.List;
public class Product {
private 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);
}
}
}
Builder類——抽象建造者類,確定產品由兩個部件PartA和PartB組成,並聲明一個得到產品建造後結果的方法GetResult。
package com.schema.builder;
public abstract class Builder {
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
ConcreteBuilder1和ConcreteBuilder2類
package com.schema.builder;
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
public void BuildPartA(){
product.Add("部件A");
}
public void BuildPartB(){
product.Add("部件B");
}
public Product GetResult(){
return product;
}
}
package com.schema.builder;
public class ConcreteBuilder2 extends Builder {
private Product product = new Product();
public void BuildPartA(){
product.Add("部件X");
}
public void BuildPartB(){
product.Add("部件Y");
}
public Product GetResult(){
return product;
}
}
package com.schema.builder;
public class Director {
public void Construct(Builder bulider){
bulider.BuildPartA();
bulider.BuildPartB();
}
public static void main(String[] args){
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
director.Construct(b1);
director.Construct(b2);
Product p1 = b1.GetResult();
Product p2 = b2.GetResult();
p1.Show();
p2.Show();
}
}
建造者模式的好處就是使得建造代碼與表示代碼分離,由於建造者隱藏了該產品是如何組裝的,所以若需改變一個產品的內部表示,只需再定義一個具體的建造者就可以了。