溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

web開發(fā)中如何入門建造者模式

發(fā)布時間:2021-09-17 10:05:21 來源:億速云 閱讀:117 作者:柒染 欄目:web開發(fā)

本篇文章給大家分享的是有關(guān)web開發(fā)中如何入門建造者模式,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

今天我們要講的是設(shè)計模式中三種模式(創(chuàng)建型模式、行為型模式、結(jié)構(gòu)型模式)中的創(chuàng)建型模式中的建造者模式,也可以叫 Builder模式。

與其他的創(chuàng)建型模式比如工廠模式一樣都是用來服務(wù)相同的目標(biāo),但是他們的作用場景不一樣,實現(xiàn)方式不一樣而已,但最終的目的都是一個:就是為了讓我們寫出結(jié)構(gòu)嚴(yán)謹(jǐn),易懂且易擴展的高質(zhì)量代碼。

建造者模式

什么叫建造者?他的應(yīng)用場景又是什么呢?

當(dāng)我們需要實列化一個復(fù)雜的類,以得到不同結(jié)構(gòu)類型和不同的內(nèi)部狀態(tài)的對象時,我們可以用不同的類對它們的實列化操作邏輯分別進行封裝,這些類我們就稱之為建造者。

當(dāng)我們需要來之同一個類,但是要就有不同結(jié)構(gòu)對象時,就可以通過構(gòu)造另一個建造者來進行實列化。

----------以上定義來自《設(shè)計模式之美》。

為了加深理解我們再來一個流程圖

web開發(fā)中如何入門建造者模式

從圖中我們主以看出建造者主要分為4種角色:

Product(產(chǎn)品類) :我們具體需要生成的類對象

Builder(抽象建造者類):為我們需要生成的類對象,構(gòu)建不同的模塊屬性,即:公開構(gòu)建產(chǎn)品類的屬性,隱藏產(chǎn)品類的其他功能

ConcreteBuilder(具體建造者類):實現(xiàn)我們要生成的類對象

Director(導(dǎo)演類):確定構(gòu)建我們的類對象具體有哪些模塊屬性,在實際應(yīng)用中可以不需要這個角色,直接通過client處理

舉例

在電商中有多種不同類型的商品 普通實物商品,電子卡券商品,虛擬視頻學(xué)習(xí)商品  等多種不同的商品,他們都是商品但是他們的屬性卻不一樣,電子卡券:獨有券碼,學(xué)習(xí)視頻:獨有視頻鏈接等。

那我們要怎么實現(xiàn)這種這種創(chuàng)建商品呢?

我們先看下最普通的創(chuàng)建方式:

web開發(fā)中如何入門建造者模式

我們先創(chuàng)建一個基礎(chǔ)商品Item類:

web開發(fā)中如何入門建造者模式

這里我們可以看到根據(jù)請求類型,也可以完全創(chuàng)建出我們想要的類型商品,但是一個商品屬性不可能只有這么一點屬性,那以后擴展更多呢?那這個代碼我們看上去就會很臃腫,也不好維護。

接下來我們就看下建造者模式怎么去實現(xiàn):

web開發(fā)中如何入門建造者模式

第一步:創(chuàng)建我們的抽象建造者類。這里面我們看下有三個抽象方法,來確定不同的商品類型,我們調(diào)用不同的方法,達到解偶的思想

web開發(fā)中如何入門建造者模式

第二步:創(chuàng)建具體建造者類。對抽象建造者類的抽象方法進行實現(xiàn)賦值,達到我們所需要的結(jié)果。

web開發(fā)中如何入門建造者模式

第三步:創(chuàng)建我們的導(dǎo)演類。指導(dǎo)我們怎么去創(chuàng)建對象,這個我們是可以簡化的,視具體使用場景確定吧!

web開發(fā)中如何入門建造者模式

web開發(fā)中如何入門建造者模式

最后就是看我們的測試結(jié)果了。在省略導(dǎo)演類的時候其實我們也完全可以的構(gòu)建出我們想要的結(jié)果,因為我這寫的是測試demo所以沒有寫傳參,這個大家可以根據(jù)自己的實際應(yīng)用場景去做改造。

與普通的寫法相比建造者模式的寫法使的這個代碼可讀性高,而且易擴展,不同類型的商品達到了解耦合的效果。

舉例二:

假設(shè)我們現(xiàn)在有另外的一種場景,我們復(fù)制一個商品時,當(dāng)沒有填寫庫存時我們默認(rèn)是0,當(dāng)用戶填寫了時我們庫存數(shù)量不能大于999999999。

那我們要怎么去實現(xiàn)呢?

PS:商品復(fù)制這個功能在電商領(lǐng)域是很普通的一個操作,對用戶來說簡化操作成本,提升用戶體檢。技術(shù)服務(wù)于業(yè)務(wù),業(yè)務(wù)決定公司的長遠(yuǎn)利益

web開發(fā)中如何入門建造者模式

web開發(fā)中如何入門建造者模式

我們在內(nèi)部創(chuàng)建了一個ItemBuilder,來處理我們的校驗邏輯。當(dāng)然我們使用普通的get,set方式其實也是可以實現(xiàn)的。

看到這里可能有人會問這個與我們使用get或者set方法又有什么區(qū)別呢?

解釋:主要是為了解決我們的賦值處于一種無效狀態(tài)

無效狀態(tài)指的是對象屬性之間存在依賴關(guān)系,合法校驗等,如果使用set方式會導(dǎo)致這種關(guān)系和校驗得不到驗證,所有可能會存在無效的狀態(tài),即A、B兩個屬性必須同時設(shè)置,缺一不可,然后set方法可能導(dǎo)致遺漏等

只有我們了解了每種設(shè)計模式解決了什么問題,我們才知道哪種場景用什么模式或者多種設(shè)計模式進行組合,避免產(chǎn)生因強行使用設(shè)計模式,反而使得代碼更加的不好維護了。

以上就是web開發(fā)中如何入門建造者模式,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI