摘要:創(chuàng)建型模式創(chuàng)建型模式是對一個類的實例化過程進行了抽象,把對象的創(chuàng)建和對象的使用進行了分離關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型模式,這一篇說一說建造者模式建造者模式的定義將一個復雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程
創(chuàng)建型模式
創(chuàng)建型模式是對一個類的實例化過程進行了抽象,把對象的創(chuàng)建和對象的使用進行了分離
關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型模式,這一篇說一說建造者模式
建造者模式的定義將一個復雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
很官方哈,舉個例子,就拿他的名字來說,建房子,你盡管告訴開發(fā)商,我有錢我要一個這樣的房子,然后開發(fā)商就會去找到工人,然后進行一些列的工作,最后工人干完之后,你住進去了,不關(guān)心過程,只要結(jié)果就是建造者模式
總之建造者模式就是通過一步步構(gòu)建多個組成部分,直到構(gòu)建一個對象
建造者模式實現(xiàn)根據(jù)上邊的例子來實現(xiàn)一下建造者
首先你的需求就是你需要一個你想要的房子,那么你肯定不能自己去建造,首先你會找到開發(fā)商
/** * @author: 周靖松 * @information: 開發(fā)商 * @Date: 2019-07-14 10:11:54 */ class Developer { constructor() { this.need = ["臥室", "廚房", "客廳"]; console.log("我需要這樣的房間"); } construct() { console.log("開始建造"); let workerOk=this.need.map(el=>{ let builder = new CreatDiagram(); builder.build(el); return builder.getResult(); }) console.log("房子不錯"); console.log(workerOk); } } // 要求產(chǎn)品 let home = new Developer(); // 生成產(chǎn)品 home.construct();
這是最終的目的,在我們new這個開發(fā)商類的時候,我們告訴他我們需要什么樣的房子,需要有什么,然后開發(fā)商也不是自己去建造,他需要一個設(shè)計圖,并且需要一些工人來幫助他實現(xiàn)建造
/** * @author: 周靖松 * @information: 設(shè)計圖抽象類 * @Date: 2019-07-14 10:11:10 */ class Diagram { constructor() { console.log("拿到圖紙") } build(partName) { console.log(`觀察${partName}圖紙`); } } /** * @author: 周靖松 * @information: 設(shè)計圖實現(xiàn) * @Date: 2019-07-14 10:11:25 */ class CreatDiagram extends Diagram { constructor() { super(); } build(partName) { super.build(partName); console.log(`建造開始${partName}`); this.worker = new worker(partName); } getResult() { console.log("完工"); return this.worker; } }
ok 設(shè)計圖到手,開始招人干活
/** * @author: 周靖松 * @information: 工人類 * @Date: 2019-07-14 10:11:40 */ class worker { constructor(material) { console.log(`我建造了${material}`); this.data = material } }
最后放一下全部代碼
/** * @author: 周靖松 * @information: 設(shè)計圖抽象類 * @Date: 2019-07-14 10:11:10 */ class Diagram { constructor() { console.log("拿到圖紙") } build(partName) { console.log(`觀察${partName}圖紙`); } } /** * @author: 周靖松 * @information: 設(shè)計圖實現(xiàn) * @Date: 2019-07-14 10:11:25 */ class CreatDiagram extends Diagram { constructor() { super(); } build(partName) { super.build(partName); console.log(`建造開始${partName}`); this.worker = new worker(partName); } getResult() { console.log("完工"); return this.worker; } } /** * @author: 周靖松 * @information: 工人類 * @Date: 2019-07-14 10:11:40 */ class worker { constructor(material) { console.log(`我建造了${material}`); this.data = material } } /** * @author: 周靖松 * @information: 開發(fā)商 * @Date: 2019-07-14 10:11:54 */ class Developer { constructor() { this.need = ["臥室", "廚房", "客廳"]; console.log("我需要這樣的房間"); } construct() { console.log("開始建造"); let workerOk=this.need.map(el=>{ let builder = new CreatDiagram(); builder.build(el); return builder.getResult(); }) console.log("房子不錯"); console.log(workerOk); } } // 要求產(chǎn)品 let home = new Developer(); // 生成產(chǎn)品 home.construct();
具體打印結(jié)果如下
建造者模式的優(yōu)缺點 優(yōu)點在建造者模式里邊, 你不需要知道建造的過程是怎么樣的,創(chuàng)建的實例將會與過程解耦。
而且建造者模式里邊可以根部不同的的具體實現(xiàn)來得到不同的實例
建造者模式對于擴展來說很方便,不需要改變原有的代碼
缺點同樣的,如果類內(nèi)部的差異比較大,或者變化復雜的話,你就會增加很多對應(yīng)的實現(xiàn)類,會使得代碼比較臃腫
總結(jié)上一篇介紹的抽象工廠,相比較而言,抽象工廠返回的就好比是房子的一些類的房屋,返回的是具體的小類,比較靈活,隨意組裝,但是像一些復雜的組成,則有些啰嗦,而建造者則返回的是這些類組裝好的一個對象,各有各的應(yīng)用場景,建造者模式可以比較適用與那些有固定生成順序的對象,或者對象內(nèi)部有復雜結(jié)構(gòu)的情況
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/105659.html
摘要:優(yōu)點建造者模式的封裝性很好,對象本身與構(gòu)建過程解耦。建造者模式很容易進行擴展。適用場景需要生成的對象具有復雜得內(nèi)部結(jié)構(gòu)且內(nèi)部屬性本身相互依賴建造者模式的代碼實現(xiàn)建造者模式主要有個部分產(chǎn)品類建造者類指揮者類客戶。建造者完成相應(yīng)的部分。 建造者模式 建造者模式(builder pattern)比較簡單,它屬于創(chuàng)建型模式的一種,將一個復雜的對象分解成多個簡單的對象來進行構(gòu)建,將復雜的構(gòu)建層與...
摘要:建造者模式實現(xiàn)建造者模式實現(xiàn)創(chuàng)建抽象建造者類創(chuàng)建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...
1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個復雜對象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 說人話:將構(gòu)...
摘要:書籍建造者類調(diào)用建造者高效能人士的七個習慣史蒂芬柯維勵志上面的這個類和第一個例子的效果一樣,但是長度確減少不少,在有更多屬性的時候,減少的代碼量會更為明顯。參考內(nèi)容設(shè)計模式張容銘 showImg(https://segmentfault.com/img/remote/1460000015147692); 1 什么是建造者模式? 建造者模式(Builder)是將一個復雜對象的構(gòu)建層與其表...
摘要:書籍建造者類調(diào)用建造者高效能人士的七個習慣史蒂芬柯維勵志上面的這個類和第一個例子的效果一樣,但是長度確減少不少,在有更多屬性的時候,減少的代碼量會更為明顯。參考內(nèi)容設(shè)計模式張容銘 showImg(https://segmentfault.com/img/remote/1460000015147692); 1 什么是建造者模式? 建造者模式(Builder)是將一個復雜對象的構(gòu)建層與其表...
閱讀 864·2021-10-09 09:58
閱讀 710·2021-08-27 16:24
閱讀 1791·2019-08-30 14:15
閱讀 2438·2019-08-30 11:04
閱讀 2165·2019-08-29 18:43
閱讀 2230·2019-08-29 15:20
閱讀 2782·2019-08-26 12:20
閱讀 1701·2019-08-26 11:44