設計模式 建造者模式(Builder)

2021-06-12 22:21:39 字數 2186 閱讀 7594

將乙個複雜物件的構建於它的表示分離,使得同樣的構建過程可以建立不同的表示。並且因為構建過程是標準化的,所以當需要標準化構建過程時也可以使用。

builder物件提供給導向器乙個構造產品的抽象介面。該介面使得生成器可以隱藏這個產品的表示和內部結構。它同時也隱藏了該產品是如何裝配的。因為產品是通過抽象介面構造的,你在改變該產品的內部表示時所要做的只是定義乙個新的生成器。

builder模式通過封裝乙個複雜物件的建立和表示方式提高了物件的模組性。客戶不需要知道定義產品內部結構的類的所有資訊。只要呼叫指揮者的介面就可以了。每乙個concretebuilder包含了建立和裝配乙個特定產品的所有**。然後不同的director可以復用它以在相同部件集合的基礎上構造不同的產品(改變順序)。

builder模式與一下子就生成產品的建立型模式不同,它是在指揮者的控制下一步一步構造產品的。僅在該產品完成時指揮者才從生成器中取回它。因此builder介面相比其他建立型模式能更好地反應產品的構造過程。同時通過建立不同的指揮者,可以使得產品按不同的步驟進行生產。這可以說明builder模式處理生產線產品,抽象工廠模式處理分系列產品。

生成器逐步的構造它們的產品。因此builder類介面必須足夠普遍,以便為各種型別的具體生成器構造產品。

通常情況下,有具體生成器生成的產品,它們的表示區別是如此之大以至於給不同的產品以公共父類沒有太大意思。

c++中,生成方法故意不宣告為純虛成員函式,而是將它們定義為空方法,這樣沒有強制修改所有的生成方法,只選用足夠的步驟進行修改就可以了。(想想純虛函式與虛函式的區別)。

乙個按步驟建立電單車、普通汽車、加強型汽車的例子:

#include #include #include #pragma  warning (disable: 4786)  //忽略警告c4786

using namespace std;

//product類

class vehicle

void show()

virtual buildpartb()

virtual vehicle* getresult() };

//具體builder類

class carbuilder:public vehiclebuilder

virtual buildparta()

virtual buildpartb()

virtual buildpartc()

virtual vehicle* getresult() };

//指揮者類,運用具體構造器的介面來標準化生成物件

class director

};//可以定義不同的指揮者類,這樣的化可以選擇

//組裝不同的夠造步驟,生成不同的產品

class directorplus

};//客戶端

int main()

{ carbuilder* carbuiler=new carbuilder;

carbuilder* carbuilerplus=new carbuilder;

motorcyclebuilder* motorbuilder=new motorcyclebuilder;

director* dp=new director;

directorplus* ***=new directorplus;

dp->construct(carbuiler); //構建普通汽車

vehicle* car=carbuiler->getresult();

dp->construct(motorbuilder); //構建電單車

vehicle* motor=motorbuilder->getresult();

cout << "we build a ordinary car"

cout << "we build a motorcycle"

***->construct(carbuilerplus); //構建加強版的汽車

vehicle* carp=carbuilerplus->getresult();

cout << "we build a enhanced car"

cout << "program created by sicofield"<

Java設計模式(五) 建造者模式Builder

我們要建造乙個複雜的產品。比如 神舟飛船 iphone。這個複雜的產品的建立,有這樣乙個問題需要處理 要構建的物件,宇宙飛船 package com.iter.devbox.builder 宇宙飛船 author shearer public class airship public orbital...

設計模式讀書筆記之建造者模式 Builder

建造者模式 將複雜物件的建造和表示分離,使同樣的建造過程可以創造出不同細節的產品.建造者模式,聽名字就應該知道和工廠模式一樣,是用來創造物件的。但是建造者和工廠模式的區別就是工廠模式只關注最終的產品,它往往是簡單的呼叫被建立者的建構函式 而建造者更關心細節,它定義了建立乙個複雜物件所需的步驟,而建立...

設計模式 建造者模式

在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...