Hello,大家好,我是你們的新朋友小烤鴨,我們的設(shè)計模式系列中斷了幾天,今天我們繼續(xù)給它續(xù)上,那么我們下面繼續(xù)來說一種結(jié)構(gòu)型設(shè)計模式,那就是大名鼎鼎的“橋接模式”。
創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),小程序制作,十多年建站對混凝土攪拌罐等多個方面,擁有多年的網(wǎng)站維護經(jīng)驗。
定義:橋接模式的官方定義是將抽象部分與它的實現(xiàn)部分分離,使得他們都可以獨立變化,是一種結(jié)構(gòu)型對象設(shè)計模式;上面這個定義比較拗口,且晦澀難懂,那么我們舉個實際生活中的例子:橋使我們大家所熟知的,它的作用就是將兩岸聯(lián)系起來,我們兩岸的老百姓可以通過這座橋自由流通,云游四方,橋接模式也差不多也就是這個意思;
適用場景:“橋接模式主要用于在一個系統(tǒng)中需要在抽象化和具體化之間增加更多的靈活性,避免在兩個層次建立靜態(tài)的繼承關(guān)系,通過橋接模式可以使他們在抽象層建立一個關(guān)聯(lián)關(guān)系”,這句話并不好懂,需要有一定的編程工作的經(jīng)驗積累才能慢慢理解,而其中所“抽象部分”和“實現(xiàn)部分”可以以繼承的方式獨立擴展而互不影響,在程序運行的時候可以動態(tài)將一個抽象化子類的對象和一個實現(xiàn)化子類的對象進(jìn)行組合,即系統(tǒng)需要對抽象化角色和實現(xiàn)化角色進(jìn)行動態(tài)耦合;“一個類存在兩個(或多個)獨立變化的維度,并且這些維度都需要獨立擴展的”,理解這句話橋接模式就不難搞懂了,對于那些不希望使用繼承或者因為多層繼承導(dǎo)致系統(tǒng)類的數(shù)量急劇增加造成“類爆炸”的情況(違反程序設(shè)計的“單一職責(zé)原則”),橋接模式更合適;
優(yōu)點:1、將抽象部分和實現(xiàn)部分分離,使他們可以獨立變化(符合程序設(shè)計的“開閉原則”和“單一職責(zé)”);2、增加了程序的擴展能力;
缺點:會增加系統(tǒng)的理解和實際難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,需要開發(fā)者針對抽象進(jìn)行設(shè)計;
角色分析:
1、抽象化角色(Abstraction):給出抽象化角色的定義,并保存一個對實現(xiàn)化對象的引用;
2、修正抽象化角色(RefinedAbstraction):擴展抽象化角色,改變和修正父類抽象化角色的定義;
3、實現(xiàn)化角色(Implementor):實現(xiàn)化角色的定義,不給出具體實現(xiàn);
4、具體實現(xiàn)化角色(ConcreteImplementor):給出實現(xiàn)化角色的具體實現(xiàn);
模式結(jié)構(gòu)圖:
重點:說了這么多,簡單的講橋接就是將需要“M*N”個類解決的問題,變成“M+N"個類就能解決的問題;
示例代碼:
package cn.com.pep.model.bridge;
/**
*
* @Title: Bridge
* @Description: 橋接口,實現(xiàn)化角色,給出接口定義,不提供具體實現(xiàn)
* @author wwh
* @date 2022-9-9 10:30:15
*/
public interface Bridge {
/**
* @Title: target
* @Description:
*/
public void target();
}