生成器模式的定義:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
我們先來看乙個簡單的例子,比如說product類是乙個複雜的類,構建它需要許多步驟
class我們需要定義乙個抽象的生成器類builder,來定義構建product的步驟product
}
abstract我們需要定義具體的生成器類concretebuilderone、concretebuildertwo來實現builder (即複雜物件的表示)class
builder
abstractclass
concretebuilderone
public
override
void
buildpartb()
public
override
void
buildpartc()
public
override
void
buildpartd()
public
override
product getresult()
}
abstract接下來我們需要定義乙個叫director的類,我們叫它指揮者類(它負責複雜物件的構建)class
concretebuildertwo
public
override
void
buildpartb()
public
override
void
buildpartc()
public
override
void
buildpartd()
public
override
product getresult()
}
class下面我們就可以在客戶端構建物件了director
}
static通過上面的**可以很容易看出,生成器模式使得構建物件的過程獨立出來放到指導者類裡,它不負責具體每步的實現,具體的實現放到生成器類裡,這樣它們就分離開來了。指導者就是可以重用的構建過程,而生成器是可以被切換的具體實現。void main(string
args)
生成器模式的結構圖如下:
生成器模式的重心在於分離構建演算法和具體的構造實現,從而使得構建演算法可以重用。具體的構造實現可以很方便的擴充套件和切換。
值得一提的是,在前面的例子裡,指導者僅僅是簡單地呼叫了生成器的方法,實際上可能回事比較複雜的演算法,指導者和生成器是需要互動的,比如:1.執行指導者時,會按照整體構建演算法的步驟進行運算,可能先運算前幾部,到了某一步,需要呼叫builder建立某個部件物件了,在呼叫builder時可能會把前面運算的資料傳給builder。2.builder建立好部件物件後可能需要返回該物件供指導者使用。 3.如此反覆下去,直到整個構建演算法執行完成,最終產品也就建立完了。
生成器模式的本質:分離整體構建演算法和部件構造。
生成器模式
閱讀 研磨設計模式 筆記。之後若有所感,再補充。生成器模式目的 將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。示例 description 描述輸出到檔案頭的物件 author liuwei date 2014 4 17 version 1.0 public class...
生成器模式
定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。生成器模式利用乙個導演者物件和具體建造者物件乙個乙個地建造出所有的零件,從而建造出完整的物件。四個要素 builder 生成器介面,定義建立乙個product物件所需要的各個部件的操作。concretebuilder 具...
生成器模式 Builder
把複雜的物件的構建與其表示分離開,以便根據程式的需要在相同的建立過程中建立不同的表示。每個生成器必須有乙個相同的方法名稱。client 建立乙個 director 物件,指定乙個 build 物件,配置 director。當 product 需要生成時,director 通知該builder bui...