模式說法之 建造者

2021-09-05 22:13:02 字數 3201 閱讀 3269

在軟體系統中,有時候面臨乙個「複雜物件」的建立工作,其通常由各個部分的子物件用一定演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合到一起的演算法卻相對穩定。

如何應對種變化呢?如何提供一種「封裝機制」來隔離出「複雜物件的各個部分」的變化,從而保持系統中的「穩定構建演算法」不隨需求的改變而改變?

將乙個複雜物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。

·抽象建造者(

builder

):給出乙個抽象介面,以規範產品物件的各個組成成分的建造。這個介面規定要實現複雜物件的哪些部分的建立,並不涉及具體的物件部件的建立。

·具體建造者(

concrete builder

):實現

builder

介面,針對不同的商業邏輯,具體化複雜物件的各部分的建立。

在建造過程完成後,提供產品的例項。

·指導者(

director

):呼叫具體建造者來建立複雜物件的各個部分,在指導者中不涉及具體產品的資訊,只負責保證物件各部分完整建立或按某種順序建立。

產品(product

):要建立的複雜物件。

(一)**

//複雜的物件 //

各個部分的子物件用一定演算法構成 //

各個部分經常面臨著劇烈的變化

public

class

product

public

void show()

} //

建造者

public

inte***ce

ibuilder

//實現建造者

public

class

buildera : ibuilder

public

void buildpart2()

public

void buildpartn()

public

product getproduct()

}

//指導者

public

class

director }

(二)測試

[test]

public

void testbuilder()

結果:

part 1

part 2

part n

再舉乙個比較容易理解的例子

(一)產品類

public

class

product

public

void show()

} }

這裡乙個完整的產品,它由幾部分構成,因為它的構建相對穩定,但每個部分卻可能發生劇烈變化。因為這個構成如果用別的方法來理解不太好理解,比如:產品類有個字串的

list

。這裡用委託實現。可以助於理解:構建部分

1,……

(二)建造者介面

public

inte***ce

ibuilder

產品構建是相對穩定的,但包括的

4部分卻可能發生劇烈變化。

(三)實現構造者

1public

class

builder : ibuilder

public

void p2()

public

void p3()

public

void p4()

public

void part1()

public

void part2()

public

void part3()

public

void part4()

public

product getproduct()

} 這裡實現了建造者。每實現一部分的的構建,就代表了整個產品構造完成了一部分。這由產品的

add方法實現。

(四)指揮者

此部分用於構建相對穩定的產品

public

class

director }

(五)測試

public

void testbuilder()

其中,建造者用於應對產品各部分劇烈的變化;而指揮者是穩定的。

還得來乙個例子,這個例子比較真實,能更好的說明這個建造者模式:

/** 要建立的物件是個複雜的物件,它由各部分組成.其中每個部分存在變化,而把部分組成整體的演算法不變,即可用建造者*

* 建造者抽象

* 各個建造者

* 指導者,把部分按固定的演算法組成複雜物件,並返回這個物件*/

//產品,car

public

class

car

public

void body(string str)

public

void tail(string str)

} public

inte***ce

ibuilder

//jeep builder(jeep factory)

public

class

jeepbuilder : ibuilder

public

void createbody()

public

void createtail()

public

car getcar()

}

//指揮者,監督者

public

class

director }

//部分發生變化,例如現在是truck

public

class

truckbuilder : ibuilder

public

void createbody()

public

void createtail()

public

car getcar()

} [test]

public

void test_4_builder()

設計模式之建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...

設計模式之建造者模式

建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...

設計模式之建造者模式

在做服務介面的時候,往往在業務處理之前需要做業務校驗,格式校驗等業務前處理。這些介面有個相同的特徵,就是必須經過這些處理步驟之後才能做核心的業務處理,拓展的服務介面也必須經過這些處理。基於這個特徵,我們就來分析一下設計模式中,建造者模式。我們先建乙個基礎的服務類 public abstract cl...