摘要:即建造者模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。指導(dǎo)類負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,指導(dǎo)類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與指導(dǎo)類直接交互的是建造者類建造者模式優(yōu)點(diǎn)建造者模式的封裝性很好。
建造者模式
將一個(gè)復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。主要解決在軟件系統(tǒng)中,有時(shí)候面臨著"一個(gè)復(fù)雜對(duì)象"的創(chuàng)建工作,由于需求的變化,這個(gè)復(fù)雜對(duì)象的某些部分經(jīng)常面臨著劇烈的變化,一些基本部件不會(huì)變。所以需要將變與不變分離。與抽象工廠的區(qū)別:在建造者模式里,有個(gè)指導(dǎo)者(Director),由指導(dǎo)者來管理建造者,用戶是與指導(dǎo)者聯(lián)系的,指導(dǎo)者聯(lián)系建造者最后得到產(chǎn)品。即建造者模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。
建造者模式四要素1.產(chǎn)品類Product:一般是一個(gè)較為復(fù)雜的對(duì)象,也就是說創(chuàng)建對(duì)象的過程比較復(fù)雜,一般會(huì)有比較多的代碼量。
2.抽象建造者類Builder: 將建造的具體過程交與它的子類來實(shí)現(xiàn),這樣更容易擴(kuò)展。
3.建造者類ConcreteBuilder: 組建產(chǎn)品;返回組建好的產(chǎn)品。
4.指導(dǎo)類Director: 負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,指導(dǎo)類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與指導(dǎo)類直接交互的是建造者類
1.建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在指導(dǎo)者類中對(duì)整體而言可以取得比較好的穩(wěn)定性。
2.建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過實(shí)現(xiàn)一個(gè)新的建造者類就可以完成。
似乎很抽象。舉個(gè)例子:前面你創(chuàng)建了一個(gè)生產(chǎn)保時(shí)捷的工廠,生產(chǎn)一臺(tái)保時(shí)捷911需要的主要部件都一樣(引擎,輪子,方向盤...)和流程是不變的,變的是引擎,輪子,控制系統(tǒng)等等部件具體實(shí)現(xiàn),這些部件的生產(chǎn)交由具體的builder去生產(chǎn)。
代碼//建造者模式 var DP = require("./DesignPattern.js"); function Car() { var _frame, _engine, _wheel; this.setFrame = function (val) { _frame = val; }; this.setEngine = function (val) { _engine = val; }; this.setWheel = function (val) { _wheel = val; }; this.getFrame = function () { return _frame }; this.getEngine = function () { return _engine }; this.getWheel = function () { return _wheel }; this.check = function () { console.log(_frame + "檢查完畢"); console.log(_engine + "檢查完畢"); console.log(_wheel + "檢查完畢"); }; } //抽象生產(chǎn)者 function Builder() { DP.Interface(this, ["buildFrame", "buildEngine", "buildWheel", "buildCar"]) } //指導(dǎo)者,產(chǎn)品生產(chǎn)流程規(guī)范 function Director(Builder) { //傳入具體制造者 var _builder = Builder; this.build = function () { _builder.buildFrame(); _builder.buildEngine(); _builder.buildWheel(); return _builder.buildCar(); }; } function Builder911() { this.__proto__ = new Builder(); var _car = new Car(); this.buildFrame = function () { console.log("制造911骨架"); _car.setFrame("911骨架"); }; this.buildEngine = function () { console.log("制造911引擎"); _car.setEngine("911引擎"); }; this.buildWheel = function () { console.log("制造911輪子"); _car.setWheel("911輪子"); }; this.buildCar = function () { console.log("911汽車各部組裝完畢"); return _car; }; } function BuilderCayma() { this.__proto__ = new Builder(); var _car = new Car(); this.buildFrame = function () { console.log("制造Cayma骨架"); _car.setFrame("Cayma骨架"); }; this.buildEngine = function () { console.log("制造Cayma引擎"); _car.setEngine("Cayma引擎"); }; this.buildWheel = function () { console.log("制造Cayma輪子"); _car.setWheel("Cayma輪子"); }; this.buildCar = function () { console.log("Cayma汽車各部組裝完畢"); return _car; }; } var builder911 = new Builder911(); var director911 = new Director(builder911); var car911 = director911.build(); car911.check(); var builderCayma = new BuilderCayma(); var directorCayma = new Director(builderCayma); var Cayma = directorCayma.build(); Cayma.check();適用場景
需要生成的對(duì)象具有復(fù)雜的內(nèi)部結(jié)構(gòu);需要生成的對(duì)象內(nèi)部屬性本身相互依賴。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79491.html
摘要:如何應(yīng)對(duì)這種變化如何提供一種封裝機(jī)制來隔離出復(fù)雜對(duì)象的各個(gè)部分的變化,從而保持系統(tǒng)中的穩(wěn)定構(gòu)建算法不隨著需求改變而改變這就是要說的建造者模式。建造者模式,將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,使得同樣的構(gòu)建過程可以采用不同的表示。 1. 簡介 在軟件系統(tǒng)中,有時(shí)候面臨著一個(gè)復(fù)雜對(duì)象的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著...
摘要:創(chuàng)建型模式創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型模式,這一篇說一說建造者模式建造者模式的定義將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程 創(chuàng)建型模式 創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離 關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型...
摘要:參考文章設(shè)計(jì)模式之建造者模式一什么是建造者模式建造者模式是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 參考文章:java設(shè)計(jì)模式之建造者模式 一、什么是建造者模式建造者模式:是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。工廠類模式提供的是創(chuàng)建單個(gè)類的模式,而建造者模式則是將各種產(chǎn)品集中起來進(jìn)行管理,用來創(chuàng)建復(fù)合對(duì)象,所謂...
摘要:注意事項(xiàng)聲明函數(shù)時(shí)候處理業(yè)務(wù)邏輯區(qū)分和單例的區(qū)別,配合單例實(shí)現(xiàn)初始化構(gòu)造函數(shù)大寫字母開頭推薦注意的成本。簡單工廠模式使用一個(gè)類通常為單體來生成實(shí)例。 @(書籍閱讀)[JavaScript, 設(shè)計(jì)模式] 常見設(shè)計(jì)模式 一直對(duì)設(shè)計(jì)模式不太懂,花了一下午加一晚上的時(shí)間,好好的看了看各種設(shè)計(jì)模式,并總結(jié)了一下。 設(shè)計(jì)模式簡介 設(shè)計(jì)模式概念解讀 設(shè)計(jì)模式的發(fā)展與在JavaScript中的應(yīng)用 ...
摘要:而建造者模式則是要求按照指定的藍(lán)圖建造產(chǎn)品,它的主要目的是通過組裝零配件而產(chǎn)生一個(gè)新產(chǎn)品。最后通過一個(gè)套餐實(shí)例,介紹了建造者模式在實(shí)例中的基本使用手段。 歷史文章回顧: 設(shè)計(jì)模式專欄 深入理解單例模式 深入理解工廠模式 歷史優(yōu)質(zhì)文章推薦: 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問題看這篇就夠了 無論是在現(xiàn)實(shí)世界中還是在軟件...
閱讀 2529·2021-09-28 09:36
閱讀 3670·2021-09-22 15:41
閱讀 4538·2021-09-04 16:45
閱讀 2174·2019-08-30 15:55
閱讀 2903·2019-08-30 13:49
閱讀 891·2019-08-29 16:34
閱讀 2443·2019-08-29 12:57
閱讀 1732·2019-08-26 18:42