- 概述
- UML類圖
- 代碼栗子
- 總結(jié)
-
概述
橋接模式是將抽象部分與它的實(shí)現(xiàn)部分分離贾惦,使它們都可以獨(dú)立地變化癣诱。
- 來(lái)個(gè)栗子
小明買了一輛法拉利盹沈,但是發(fā)現(xiàn)法拉利村里的人不認(rèn)識(shí)龄章,沒(méi)法兒***,因此小明特地又去買了一輛寶馬乞封,這下就可以開(kāi)出去不用解釋這是啥車了做裙,買回來(lái)后就開(kāi)始要為愛(ài)車安裝各種裝飾品,它的兩輛車可以任意搭配飾品肃晚,結(jié)論來(lái)了<抽象與實(shí)現(xiàn)分離锚贱、實(shí)現(xiàn)部分獨(dú)立地變化>
- 來(lái)個(gè)栗子
-
UML
- 優(yōu)點(diǎn):實(shí)現(xiàn)系統(tǒng)可能有多角度分類,每一種分類都有可能變化关串,分離并獨(dú)立變化拧廊,減少它們之間的耦合
-
栗子
/*汽車基類*/ public abstract class Car { /** * 安裝導(dǎo)航儀 * @param navigator */ public abstract void installNavigator(INavigator navigator); /** * 開(kāi)啟導(dǎo)航 * 開(kāi)啟導(dǎo)航是調(diào)用導(dǎo)航接口實(shí)現(xiàn)類的方法 */ public abstract void open(); }
/*寶馬牌汽車*/ public class BMWCar extends Car { /**導(dǎo)航儀*/ INavigator navigator = null; @Override public void installNavigator(INavigator n) { System.out.println("寶馬成功安裝了:"+n.toString()); navigator = n; } @Override public void open() { navigator.work(); } } /*法拉利牌汽車*/ public class FerrariCar extends Car { /**導(dǎo)航儀*/ INavigator navigator = null; @Override public void installNavigator(INavigator n) { System.out.println("法拉利成功安裝了:"+n.toString()); navigator = n; } @Override public void open() { navigator.work(); } }
/*導(dǎo)航儀接口*/ public interface INavigator { /** * 導(dǎo)航實(shí)現(xiàn) */ void work(); }
/*高德導(dǎo)航儀*/ public class AmapNavigator implements INavigator { @Override public void work() { System.out.println("我是高德導(dǎo)航儀!"); } @Override public String toString() { return "【高德導(dǎo)航儀】"; } } /*北斗導(dǎo)航儀*/ public class BdNavigator implements INavigator { @Override public String toString() { return "【北斗牌導(dǎo)航儀】"; } @Override public void work() { System.out.println("我是北斗導(dǎo)航儀晋修!"); } }
-
測(cè)試
public class Main { public static void main(String[] args) { test1() ; test1_1() ; } public static void test1(){ INavigator bdNavigator = new BdNavigator(); //法拉利安裝北斗導(dǎo)航 Car ferrariCar = new FerrariCar() ; ferrariCar.installNavigator(bdNavigator); ferrariCar.open(); } public static void test1_1(){ INavigator amapNavigator = new AmapNavigator(); //寶馬安裝了高德導(dǎo)航儀 Car ghostCar = new BMWCar(); ghostCar.installNavigator(amapNavigator); ghostCar.open(); } }
-
-
總結(jié)
- 橋接方式比繼承的方式要更靈活吧碾,它是汽車與配件可以獨(dú)立各自的發(fā)展
- 當(dāng)繼承造成大量類增加且不能滿足開(kāi)閉原則時(shí),可以考慮使用橋接模式