溫馨提示×

溫馨提示×

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

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

如何理解設(shè)計模式之橋模式

發(fā)布時間:2021-10-20 16:11:05 來源:億速云 閱讀:110 作者:iii 欄目:web開發(fā)

本篇內(nèi)容介紹了“如何理解設(shè)計模式之橋模式”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

舉個例子

橋模式的主要功能也是解耦,把會獨立變化的量從整個邏輯中抽離出來,從而節(jié)省我們的代碼量。我們用奶茶來舉個簡單的例子。

對于奶茶而言,它的原料往往比較簡單,就是糖、水、茶以及奶蓋等等。但是制作過程往往大相徑庭,珍珠奶茶可能就只是把茶和奶混合加上珍珠,其他的奶茶可能完全不同。

假如我們希望用程序來模擬奶茶制作的整個過程,我們會發(fā)現(xiàn)如果我們對每一種奶茶都單獨實現(xiàn)一個類是非常麻煩的。因為不同奶茶往往只是制作手法有差別,但是整體的原料以及流程可能都是一樣的。所以我們只希望可以單獨抽離出制作過程即可,這個時候我們就可以使用橋接模式,說穿了其實非常簡單,尤其是在Python當(dāng)中。

代碼實現(xiàn)

這里我們先放出奶茶這個類主體的邏輯,大家估計一看就明白了。

class BubbleTea:     def __init__(self, ice, sugar, tea, cheese, making_api):         self._ice = ice         self._sugar = sugar         self._tea = tea         self._cheese = cheese         self._making_api = making_api      def no_ice(self):         self._ice = 0      def additional_sugar(self):         self._sugar += 5      def additional_cheese(self):         self._cheese += 5      def prepare(self):         self._making_api.make(self._ice, self._sugar, self._tea, self._cheese)

這里的ice、sugar、tea和cheese都是我們?nèi)粘D滩璁?dāng)中都會添加的原料,對于奶茶的制作我們往往也會提一些加芝士、去冰以及加糖這些要求,我們也把它們做成了單獨的方法,這些也都很好理解。

這里唯一有些需要注意的就是對于奶茶的制作過程,也就是prepare這個方法,其實并不是在BubbleTea這個類當(dāng)中實現(xiàn)的,而是通過making_api從外界傳來的。這里也就是我們bridge模式的應(yīng)用了,既然處理邏輯是外界傳來的,那么它其實就和奶茶這個類解耦了,我們可以在外面自己隨意定義這個api的實現(xiàn)方式,也不會有任何影響。如果我們要在BubbleTea這個類內(nèi)部來實現(xiàn)奶茶的話,要么我們對每一種奶茶實現(xiàn)一個類,要么我們在其中做大量的判斷,無論是哪一種情況顯然都不太好,會導(dǎo)致代碼大量的堆積和臃腫。

最后我們看一下making_api的實現(xiàn),以及使用示例:

class CheeseTeaAPI:     def make(self, ice, sugar, tea, cheese):         print('cheese tea! cheese: {}, bubbles: 5, sugar: {}, tea: {}, ice: {}'.format(cheese, sugar, tea, ice))   class BubbleTeaAPI:     def make(self, ice, sugar, tea, cheese):         print('bubble tea! sugar: {}, tea: {}, ice: {}'.format(sugar, tea, ice))                   if __name__ == '__main__':      teas = [BubbleTea(0, 5, 3, 0, BubbleTeaAPI()), BubbleTea(2, 5, 2, 4, CheeseTeaAPI())]      for tea in teas:         tea.no_ice()         tea.additional_sugar()         tea.prepare()

如果大家還有困惑的話,不妨再看下代碼細(xì)節(jié),仔細(xì)思考一下。整體來說,bridge模式在Python當(dāng)中的實現(xiàn)還是比較簡單的,最起碼比在Java中的實現(xiàn)簡單多了。

“如何理解設(shè)計模式之橋模式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向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