摘要:即建造者模式可以強制實行一種分步驟進行的建造過程。指導類負責調用適當的建造者來組建產品,指導類一般不與產品類發(fā)生依賴關系,與指導類直接交互的是建造者類建造者模式優(yōu)點建造者模式的封裝性很好。
建造者模式
將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創(chuàng)建不同的表示。主要解決在軟件系統(tǒng)中,有時候面臨著"一個復雜對象"的創(chuàng)建工作,由于需求的變化,這個復雜對象的某些部分經常面臨著劇烈的變化,一些基本部件不會變。所以需要將變與不變分離。與抽象工廠的區(qū)別:在建造者模式里,有個指導者(Director),由指導者來管理建造者,用戶是與指導者聯系的,指導者聯系建造者最后得到產品。即建造者模式可以強制實行一種分步驟進行的建造過程。
建造者模式四要素1.產品類Product:一般是一個較為復雜的對象,也就是說創(chuàng)建對象的過程比較復雜,一般會有比較多的代碼量。
2.抽象建造者類Builder: 將建造的具體過程交與它的子類來實現,這樣更容易擴展。
3.建造者類ConcreteBuilder: 組建產品;返回組建好的產品。
4.指導類Director: 負責調用適當的建造者來組建產品,指導類一般不與產品類發(fā)生依賴關系,與指導類直接交互的是建造者類
1.建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務邏輯封裝在指導者類中對整體而言可以取得比較好的穩(wěn)定性。
2.建造者模式很容易進行擴展。如果有新的需求,通過實現一個新的建造者類就可以完成。
似乎很抽象。舉個例子:前面你創(chuàng)建了一個生產保時捷的工廠,生產一臺保時捷911需要的主要部件都一樣(引擎,輪子,方向盤...)和流程是不變的,變的是引擎,輪子,控制系統(tǒng)等等部件具體實現,這些部件的生產交由具體的builder去生產。
代碼//建造者模式 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 + "檢查完畢"); }; } //抽象生產者 function Builder() { DP.Interface(this, ["buildFrame", "buildEngine", "buildWheel", "buildCar"]) } //指導者,產品生產流程規(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();適用場景
需要生成的對象具有復雜的內部結構;需要生成的對象內部屬性本身相互依賴。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79491.html
摘要:創(chuàng)建型模式創(chuàng)建型模式是對一個類的實例化過程進行了抽象,把對象的創(chuàng)建和對象的使用進行了分離關于創(chuàng)建型模式,已經接近尾聲了,還剩下建造者模式和原型模式,這一篇說一說建造者模式建造者模式的定義將一個復雜對象的構建與它的表示分離,使得同樣的構建過程 創(chuàng)建型模式 創(chuàng)建型模式是對一個類的實例化過程進行了抽象,把對象的創(chuàng)建和對象的使用進行了分離 關于創(chuàng)建型模式,已經接近尾聲了,還剩下建造者模式和原型...
摘要:參考文章設計模式之建造者模式一什么是建造者模式建造者模式是將一個復雜的對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。 參考文章:java設計模式之建造者模式 一、什么是建造者模式建造者模式:是將一個復雜的對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。工廠類模式提供的是創(chuàng)建單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來創(chuàng)建復合對象,所謂...
摘要:注意事項聲明函數時候處理業(yè)務邏輯區(qū)分和單例的區(qū)別,配合單例實現初始化構造函數大寫字母開頭推薦注意的成本。簡單工廠模式使用一個類通常為單體來生成實例。 @(書籍閱讀)[JavaScript, 設計模式] 常見設計模式 一直對設計模式不太懂,花了一下午加一晚上的時間,好好的看了看各種設計模式,并總結了一下。 設計模式簡介 設計模式概念解讀 設計模式的發(fā)展與在JavaScript中的應用 ...
摘要:而建造者模式則是要求按照指定的藍圖建造產品,它的主要目的是通過組裝零配件而產生一個新產品。最后通過一個套餐實例,介紹了建造者模式在實例中的基本使用手段。 歷史文章回顧: 設計模式專欄 深入理解單例模式 深入理解工廠模式 歷史優(yōu)質文章推薦: 分布式系統(tǒng)的經典基礎理論 可能是最漂亮的Spring事務管理詳解 面試中關于Java虛擬機(jvm)的問題看這篇就夠了 無論是在現實世界中還是在軟件...
閱讀 2458·2021-09-28 09:36
閱讀 3597·2021-09-22 15:41
閱讀 4388·2021-09-04 16:45
閱讀 1957·2019-08-30 15:55
閱讀 2847·2019-08-30 13:49
閱讀 825·2019-08-29 16:34
閱讀 2370·2019-08-29 12:57
閱讀 1679·2019-08-26 18:42