一、UML圖
二、包含的角色
Product類,具體產品類,通常由多個部件組成。是個複雜的對象。
Builder類,抽象建造者類,確定產品由若干個部件組成,並聲明一個得到此產品建造完成後的產品的接口方法。
ConcreteBuilder類,具體建造者。實現抽象建造者接口。也就是此產品的各個部件的具體構建方式。
Director類,指揮者類。使用建造者接口的類。控制產品內部部件構造的順序,組成方式等。
三、特點
建造者模式(Builder),將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
用戶只需指定需要建造的類型就可以得到它們,而不需要知道建造的過程和細節。
建造者模式主要用於創建一些複雜的對象,這些對象內部構建間的建造順序通常是穩定的,但對象內部的構建通常面臨着複雜的變化。通過建造者模式,使得建造代碼和表示代碼分離,由於建造者隱藏了該產品的組裝過程,所以若要改變一個產品內部的表示,只需要定義一個具體的建造者就行了。
四、代碼實現
c#
Product類
public class Product {
public void ShowProduct() {
// TODO implement here
}
public void SetPartA() {
// TODO implement here
}
public void SetPartB() {
// TODO implement here
}
}
Builder類
public abstract class Builder
{
protected Product product = new Product();
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetProduct();
}
ConcreteBuilder類
public class ConcreteBuilder : Builder {
public override void BuildPartA() {
product.SetPartA();
}
public override void BuildPartB() {
product.SetPartB();
}
public override Product GetProduct() {
return product;
}
}
Director類
public class Director {
public void ConstructProduct(Builder builder) {
builder.BuildPartA();
builder.BuildPartB();
}
}
front end
Director director ;
ConcreteBuilder b;
director.ConstructProduct(b);
Product p = b.GetProduct();
p.ShowProduct();
c++
Product類
class Product
{
public:
void ShowProduct()
{
}
void SetPartA()
{
}
void SetPartB()
{
}
};
Builder類
class Builder
{
public:
virtual void BuildPartA() = 0;
virtual void BuildPartB() = 0;
virtual Product GetProduct() = 0;
protected:
Product product_;
};
ConcreteBuilder類
class ConcreteBuilder : public Builder
{
public:
void BuildPartA() override
{
product_.SetPartA();
}
void BuildPartB() override
{
product_.SetPartB();
}
Product GetProduct() override
{
return product_;
}
};
Director類
class Director
{
public:
void ConstructProduct(Builder *builder)
{
builder->BuildPartA();
builder->BuildPartB();
}
};
front end
Director director ;
ConcreteBuilder b;
director.ConstructProduct(&b);
Product p = b.GetProduct();
p.ShowProduct();