日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

結構型設計模式--橋接模式(Bridge)

系統(tǒng) 2151 0

橋接模式 (Bridge)


??? 將抽象部分與實現(xiàn)部分分離,使它們都可以獨立的變化。


??? 在軟件系統(tǒng)中,某些類型由于自身的邏輯,它具有兩個或多個維度的變化,那么如何應對這種“多維度的變化”?如何利用面向對象的技術來使得該類型能夠輕松的沿著多個方向進行變化,而又不引入額外的復雜度?這就要使用Bridge模式。


??? 效果及實現(xiàn)要點:
??? (1) Bridge模式使用“對象間的組合關系”解耦了抽象和實現(xiàn)之間固有的綁定關系,使得抽象和實現(xiàn)可以沿著各自的維度來變化。


??? (2) Bridge模式的應用一般在“兩個非常強的變化維度”,有時候即使有兩個變化的維度,但是某個方向的變化維度并不劇烈——換言之兩個變化不會導致縱橫交錯的結果,并不一定要使用Bridge模式。

?

結構型設計模式--橋接模式(Bridge)

?

??? 拿汽車在路上行駛的來說。即有小汽車又有公共汽車,它們都不但能在市區(qū)中的公路上行駛,也能在高速公路上行駛。這你會發(fā)現(xiàn),對于交通工具(汽車)有不同的類型,然而它們所行駛的環(huán)境(路)也在變化,在軟件系統(tǒng)中就要適應兩個方面的變化?怎樣實現(xiàn)才能應對這種變化呢?

    // 抽象路
public abstract class AbstractRoad {
	protected AbstractCar car;

	public AbstractCar getCar() {
		return car;
	}

	public void setCar(AbstractCar car) {
		this.car = car;
	}

	public abstract void run();
}

// 高速公路
public class SpeedWay extends AbstractRoad {
	public void run() {
		car.run();
		System.out.println("高速公路上行駛");
	}
}

// 市區(qū)街道
public class Street extends AbstractRoad {
	public void run() {
		car.run();
		System.out.println("市區(qū)街道上行駛");
	}
}

// 抽象汽車
public abstract class AbstractCar {
	public abstract void run();
}

// 小汽車;
public class Car extends AbstractCar {
	public void run() {
		System.out.println("小汽車在");
	}
}

// 公共汽車
public class Bus extends AbstractCar {
	public void run() {
		System.out.println("公共汽車在");
	}
}

public class Client {
	public static void main(String[] args) {
		// 小汽車在高速公路上行駛;
		AbstractRoad road1 = new SpeedWay();
		road1.setCar(new Car());
		road1.run();
		// 公共汽車在高速公路上行駛;
		AbstractRoad road2 = new SpeedWay();
		road2.setCar(new Bus());
		road2.run();
	}
}
  

????

??? 增加一個維度"人",不同的人開著不同的汽車在不同的路上行駛(三個維度)

    public abstract class People {
	protected AbstractRoad road;

	public AbstractRoad getRoad() {
		return road;
	}

	public void setRoad(AbstractRoad road) {
		this.road = road;
	}

	public abstract void run();
}

public class Man extends People {
	public void run() {
		System.out.println("男人開著");
		road.run();
	}
}

public class WoMan extends People {
	public void run() {
		System.out.println("女人開著");
		road.run();
	}
}

public class Client {
	public static void main(String[] args) {
		// 男人開著公共汽車在高速公路上行駛;
		AbstractRoad road3 = new SpeedWay();
		road3.setCar(new Bus());
		People p = new Man();
		p.setRoad(road3);
		p.run();
	}
}

  

?

??? 橋接模式很好的符合了開放-封閉原則和優(yōu)先使用合成(而不是繼承)這兩個面向對象原則組合模式?

結構型設計模式--橋接模式(Bridge)


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 张北县| 图木舒克市| 徐汇区| 旬阳县| 香河县| 西华县| 琼海市| 会东县| 瑞金市| 洛宁县| 孟津县| 南开区| 霍林郭勒市| 洪江市| 甘泉县| 蒲城县| 措勤县| 衡阳市| 新干县| 隆尧县| 弥勒县| 凤城市| 察隅县| 五寨县| 张家界市| 渝北区| 绥德县| 灵石县| 汨罗市| 年辖:市辖区| 漯河市| 桂阳县| 临泉县| 湖南省| 行唐县| 宁蒗| 承德市| 哈尔滨市| 凤阳县| 同德县| 崇州市|