本文為datawhale2022年12月組隊(duì)學(xué)習(xí)《大話設(shè)計(jì)模式》task6打卡學(xué)習(xí)。
【教程地址】https://github.com/datawhalechina/sweetalk-design-pattern
橋接模式(Bridge Pattern)
又稱為柄體(Handle and Body)模式或接口(Interfce)模式,是將抽象部分與其實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
有不同品牌的手機(jī),同時這些手機(jī)上還要安裝不同的應(yīng)用軟件,考慮在需要不斷增加軟件的情況下,如果設(shè)計(jì)相應(yīng)的抽象類。
需要注意對于不同品牌的手機(jī),軟件基本無法兼容。因此如果手機(jī)需要增加軟件,就需要針對不同品牌的手機(jī)分別實(shí)現(xiàn)軟件功能。
實(shí)現(xiàn)該問題的程序通常會采用繼承方式設(shè)計(jì),那么父類和子類之間會具有非常緊密的依賴關(guān)系,父類中的任何變化都會影響子類,子類繼承的實(shí)現(xiàn)如果無法解決新需求就必須重寫或替換父類。如此設(shè)計(jì)會導(dǎo)致類爆炸問題,并且擴(kuò)展不靈活。
1.2.2 問題解決考慮到單獨(dú)使用品牌或單獨(dú)使用軟件作為抽象類,都會在有新的需求來臨后使得父類必須重寫。因此需要使用合成/聚合原則代替類繼承思想設(shè)計(jì)程序,是應(yīng)該有個“手機(jī)品牌”抽象類和“手機(jī)軟件”抽象類,讓不同的品牌和功能都分別繼承于它們,這樣要增加新的品牌或新的功能都不用影響其他類了。結(jié)構(gòu)圖:
在工程中,包括以下四個角色:
官方源碼鏈接:
橋接模式Java實(shí)現(xiàn)
橋接模式python實(shí)現(xiàn)
客觀來說這個剛接觸確實(shí)很難直接應(yīng)用,但是一旦理解透徹對于面向?qū)ο笤O(shè)計(jì)有非常大的幫助。有以下情況,可以嘗試使用:
職責(zé)鏈模式(Chain of Responsibility)
也叫責(zé)任鏈模式,是一種對象行為型模式。為了避免請求發(fā)送者與多個請求處理者耦合在一起,于是將所有請求的處理者通過前一對象記住其下一個對象的引用而連成一條鏈;當(dāng)有請求發(fā)生時,可將請求沿著這條鏈傳遞,直到有對象處理它為止。
職責(zé)鏈模式核心是解決服務(wù)中先后執(zhí)行處理關(guān)系,從而降低請求發(fā)送者和接受者之間的耦合關(guān)系。類似于擊鼓傳花。
要用程序?qū)崿F(xiàn)加薪、請假申請等需要層層審批的場景。比如向經(jīng)理提加薪申請,經(jīng)理沒權(quán)利然后向總監(jiān)上報,總監(jiān)沒權(quán)限然后向總經(jīng)理匯報等。
2.2.1 問題分析如果將管理者創(chuàng)建成為一個類,那么該類會具有太多的責(zé)任,比如經(jīng)理、總監(jiān)以及總經(jīng)理的審批和上報功能,就違背了單一職責(zé)原則。而且以后的需求可能會增加新的管理類別,比如項(xiàng)目經(jīng)理、部門經(jīng)理、人事總監(jiān)等,那么就勢必會修改管理者類以完成擴(kuò)展,就違背了開放封閉原則。
2.2.2 問題解決將公司管理者的類別變成管理者的子類,可以通過多態(tài)性來化解分支帶來的僵化。然后通過不同管理者之間建立管理關(guān)系實(shí)現(xiàn)請求的傳遞,使得請求的發(fā)送者和接收者解耦,可以讓各服務(wù)模塊更加清晰。處理者負(fù)責(zé)處理請求,客戶只需要將請求發(fā)送到職責(zé)鏈,無需關(guān)心具體的處理細(xì)節(jié)。
其中有兩個關(guān)鍵類:
官方源碼鏈接:
職責(zé)鏈模式Java實(shí)現(xiàn)
職責(zé)鏈模式python實(shí)現(xiàn)
責(zé)任鏈模式通常在以下幾種情況使用。
中介者模式(Mediator Pattern)
又叫又叫做調(diào)停者模式。它提供了一個中介類,用一個中介對象來封裝一系列的對象交互。
中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們的交互。中介者模式屬于行為型模式,用來降低多個對象和類之間的通信復(fù)雜性。
剛進(jìn)公司的新人需求其他部門同事幫忙是有困難的,但是通過主管協(xié)調(diào)就會簡單許多。
3.2.1 問題分析將系統(tǒng)分割成許多對象通??梢栽黾悠鋸?fù)用性,但是對象之間大量的連接又使得對象之間的耦合性更強(qiáng),導(dǎo)致對系統(tǒng)的行為進(jìn)行較大的改動就比較困難。
3.2.2 問題解決通過中介者對象,可以將系統(tǒng)的網(wǎng)狀結(jié)構(gòu)變成以中介者為中心的星型結(jié)構(gòu),使得對象之間的耦合度變低、擴(kuò)展性增強(qiáng),系統(tǒng)的結(jié)構(gòu)不會因?yàn)樾聦ο蟮囊朐斐纱罅康男薷墓ぷ鳌?br />在工程中,有以下四個關(guān)鍵類:
官方源碼鏈接:
中介者模式Java實(shí)現(xiàn)
中介者模式python實(shí)現(xiàn)
中介者模式一般應(yīng)用于一組對象以定義良好但是復(fù)雜的方式進(jìn)行通信的場合。以及想定制一個分布在多個類中的行為,而又不想生成太多的子類的場合。
3.4 優(yōu)缺點(diǎn) 3.4.1 優(yōu)點(diǎn)中介者會變得龐大且復(fù)雜,原本多個對象直接的相互依賴變成了中介者和多個同事類的依賴關(guān)系,同事類越多,中介者的邏輯就越復(fù)雜。
參考[1] datawhale大話設(shè)計(jì)模式教程云 - GitHub
[2] 秒懂設(shè)計(jì)模式之橋接模式(Bridge Pattern)
[3] 設(shè)計(jì)模式(十四)中介者模式
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧