長沙做痔瘡東大醫(yī)院de網(wǎng)站網(wǎng)店推廣方案范文
設(shè)計模式(結(jié)構(gòu)型設(shè)計模式——橋接模式)
橋接模式
基本定義
橋接模式將繼承關(guān)系轉(zhuǎn)化成關(guān)聯(lián)關(guān)系,它降低了類與類之間的耦合度,減少了系統(tǒng)中類的數(shù)量,也減少了代碼量。
降低了類與類之間的耦合度:脫耦就是將抽象化和實現(xiàn)化之間的耦合解脫開,或者說是將它們之間的強關(guān)聯(lián)改換成弱關(guān)聯(lián),將兩個角色之間的繼承關(guān)系改為關(guān)聯(lián)關(guān)系。
模式結(jié)構(gòu)
Abstraction:抽象類(最終需要的對象的類)。
RefinedAbstraction:擴充抽象類(產(chǎn)品/對象)。
Implementor:實現(xiàn)類接口(服務于我們的抽象類,作為抽象類的一個屬性或者是維度)。
ConcreteImplementor:具體實現(xiàn)類 。
代碼實現(xiàn)
Implementor:實現(xiàn)類接口
實現(xiàn)類接口,用于服務于抽象類(Car), 為抽象類提供必要的屬性或維度
public interface Color {void addColor(String carType);
}
ConcreteImplementor: 具體實現(xiàn)類
@Slf4j
public class Black implements Color{public void addColor(String carType) {log.info("汽車類型:{}, 噴漆顏色:黑色", carType);}
}
@Slf4j
public class White implements Color {public void addColor(String carType) {log.info("汽車類型:{}, 噴漆顏色:白色", carType);}
}
Abstraction: 抽象類
橋接模式最終目的就是為了建立一個抽象類的對象
public abstract class Car {/*** 關(guān)聯(lián)關(guān)系,抽象類使用接口實現(xiàn)類通過關(guān)聯(lián)關(guān)系進行的,這也是橋接模式的一個重要的特點* 關(guān)聯(lián)關(guān)系的重要性:* 1.關(guān)聯(lián)關(guān)系是弱關(guān)聯(lián)(降低耦合度),例如需要增加汽車顏色,只需實現(xiàn)color接口即可,不影響現(xiàn)有代碼* 2.使用color屬性時, 沒有通過繼承或者實現(xiàn)方式,這是橋接模式特點之一* 相比于適配器模式,關(guān)聯(lián)關(guān)系的橋接模式更容易達到抽象對象結(jié)構(gòu)建立的目的,而適配器模式通過繼承和實現(xiàn)的方式,達到接口兼容的目的*/public Color color;public void setColor(Color color) {this.color = color;}public abstract void makeCar(String carType);}
RefinedAbstraction: 擴充抽象類
擴充抽象類,遵從面向接口編程
public class CarImpl extends Car {public void makeCar(String carType) {color.addColor(carType);}
}
測試類
public class Test {public static void main(String[] args){Car car = new CarImpl();Color color = new Black();car.setColor(color);car.makeCar("AUDI");//print: 汽車類型:AUDI, 噴漆顏色:黑色}
}
優(yōu)點
分離抽象接口及其實現(xiàn)部分。提高了比繼承更好的解決方案。
橋接模式提高了系統(tǒng)的可擴充性,在兩個變化維度中任意擴展一個維度,都不需要修改原有系統(tǒng)。
實現(xiàn)細節(jié)對客戶透明,可以對用戶隱藏實現(xiàn)細節(jié)。
缺點
橋接模式的引入會增加系統(tǒng)的理解與設(shè)計難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對抽象進行設(shè)計與編程。
橋接模式要求正確識別出系統(tǒng)中兩個獨立變化的維度,因此其使用范圍有一定的局限性。
使用場景
- 如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個關(guān)聯(lián)關(guān)系。
- 對于那些不希望使用繼承或因為多層次繼承導致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。
- 一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展。
總結(jié)
橋接模式實現(xiàn)了抽象化與實現(xiàn)化的脫耦。他們兩個互相獨立,不會影響到對方。
對于兩個獨立變化的維度,使用橋接模式再適合不過了。
“具體的抽象類”(我們將抽象類的屬性交給具體的實現(xiàn)類去處理)所做的改變,是不會影響到客戶的。