建造者模式

2021-09-02 19:53:14 字數 2601 閱讀 3943

一種場景:客戶需要設計乙個汽車模型,基本的功能有啟動、停止、按喇叭、引擎這些功能,

執行的順序由客戶自己控制。

時間緊迫的情況下,我們設計出這種模型:

public abstract class carmodel 

else if(actionname.equalsignorecase("stop"))

else if(actionname.equalsignorecase("alarm"))

else if(actionname.equalsignorecase("engine"))}}

public arraylistgetsequence()

public void setsequence(arraylistsequence)

//setsequence允許客戶設定乙個順序,是先響喇叭還是先啟動。對於乙個具體的模型

//永遠是固定的,但是對於支援n個模型就是動態的了

}public class benzmodel extends carmodel

@override

protected void stop()

@override

protected void alarm()

@override

protected void engineboom()

}public class bmwmodel extends carmodel

@override

protected void stop()

@override

protected void alarm()

@override

protected void engineboom()

}public class client

}

執行結果如下:

benzmodel.engineboom()

benzmodel.start()

benzmodel.stop()

顯然,這樣能滿足客戶的需求,但是如果客戶需要n多種模型,勢必要在每一處執行

模型的建立和sequence的指定。

試想,有沒有改進方法,我們可以嘗試將carmodel的建立封裝起來,我們增加乙個carbuidler抽象類。具體的類圖如下:

[img]

**如下:

public abstract class carbuilder

public class benzbuilder extends carbuilder

@override

public carmodel getcarmodel()

}public class bmwbuilder extends carbuilder

@override

public carmodel getcarmodel()

}測試**如下:

benzmodel benzmodel = new benzmodel();

arraylistsequence = new arraylist<>();

sequence.add("engine");

sequence.add("start");

sequence.add("stop");

benzbuilder benzbuilder = new benzbuilder();

benzbuilder.setsequence(sequence);

carmodel benz = benzbuilder.getcarmodel();

benz.run();

//假設bmw也有這種順序

bmwbuilder bmwbuilder = new bmwbuilder();

bmwbuilder.setsequence(sequence);

carmodel bmw = bmwbuilder.getcarmodel();

bmw.run();

看下上述**,雖然把物件的建立進行了封裝,但還是要在每一處都顯示指定sequence,

試想能否進行繼續封裝,把指定sequence這段過程進行封裝。

我們加入director,相當於乙個上下文概念,裡面包含了 各種builder來構建

[img]

相關的**變更如下:

public class director 

public benzmodel getbbenzmodel()

public bmwmodel getcbmwmodel()

public bmwmodel getdbmwmodel()

}public class client

for(int i =0; i<100;i++)

for(int i =0; i<1000;i++)}}

建造者模式的執行場景:

相同的方法不同的執行順序產生不同的執行結構。

多個零配件可以裝配到乙個物件中,但是產生的執行結果又不同時可以使用該模式。

和工廠模式的區別是,工廠模式注重生產產品的過程,構建者模式重在構建過程的順序不同

建造者模式

1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...

建造者模式

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

建造者模式

建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...