在軟體系統中,某些型別由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種「多維度的變化」?如何利用物件導向的技術來使得該型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度?這就要使用橋接模式。
現在有咖啡,按大小分可以分為中杯和大杯,按型別可以分為拿鐵和摩卡,所以現在總共有四中咖啡,中杯拿鐵,大杯拿鐵,中杯摩卡,大杯摩卡,按照傳統的做法會這樣設計:
這樣設計似乎也不錯,但是如果要新增加一種型別的咖啡例如愛爾蘭咖啡,只需要在兩個維度上都增加乙個子類,設計如下:
優點:符合開閉原則
缺點:違背了單一原則,
即乙個類只有乙個引起它變化的原因,而這裡引起變化的原因卻有兩個,即咖啡型別的變化和咖啡大小的變化;
其次是類的結構過於複雜,繼承關係太多,難於維護;
最致命的一點是擴充套件性太差。如果變化沿著咖啡的大小和不同的型別兩個方向變化,我們會看到這個類的結構會迅速的變龐大。
應用橋接模式
上述例子使用橋接模式應該這樣設計,把兩個角色之間的繼承關係改為了耦合的關係.
如果需要擴充套件的話,可以在兩個維度自由的擴充套件:
**實現
//咖啡大小的抽象介面類
public inte***ce coffeesize
//中杯
public class mediumcup implements coffeesize
@override
public float getprize()
}
//大杯
public class supercup implements coffeesize
@override
public float getprize()
}
//咖啡型別的抽象介面子類
public inte***ce coffeekind
//摩卡
public class mochacoffee implements coffeekind
}
//拿鐵
public class lattecoffee implements coffeekind
}
//測試類
public class testbridgepattern
}
輸出
medium latte's price is10.0
medium mocha's price is12.0
super latte's price is15.0
super mocha's price is18.0
設計模式之橋接模式
public class test 兩個維度 乙個是具體產品,如狗 豬 乙個是抽象產品,如溫順的動物 冷酷的動物 排列組合 如溫順的狗 冷酷的豬等 abstract class animal 該橋接類的引入是關鍵 abstract class animalbridge extends animal ...
設計模式之 橋接模式
今天來學習橋接模式,在我們日常生活中,有很多的事物是可以 多維度 的變化的,比如我們去吃麵條,有雞絲面和牛肉麵兩種,每一種面又分為辣味的和不辣的,而且每種面可能會分為大碗小碗的。很多事物能夠變化的維度不止一種,甚至數十種,那麼我們在 上怎麼應對這些變化呢?每乙個都單獨弄乙個類顯然不是什麼好辦法。那麼...
設計模式之橋接模式
什麼是橋接模式 橋接模式的4個角色 示例 package com.pattern.bridge 公司類,抽象類,具體的公司需要繼承這個類 author yjzhou public abstract class corp public void makemoney package com.patter...