從uml圖看,這裡的抽象類和介面是聚合關係,就是呼叫和被呼叫的關係;refinedabstraction的父類聚合了介面,refinedabstraction呼叫介面的具體實現
如圖:由於手機品牌以及樣式的不同,每個手機的功能使用方式不相同,使用傳統的繼承方法,可以發現,每當我們擴充套件要增加乙個新的品牌或者新的樣式時,都要新增n個類,特別的繁瑣,不易於開發
使用橋接模式對以上結構進行優化
**示例
定義brand介面以及各個品牌的具體實現
//定義介面
public inte***ce brand
//vivo實現
class vivo implements brand }
//huawei實現
class huawei implements brand
}//xiaomi實現
class xiaomi implements brand
}
編寫橋梁類即抽象類phone
public abstract class phone
//定義手機功能,呼叫品牌的具體實現
//注意該方法應該定義為protected,因為該方法還沒有完成,還需要子類的填充,所以不能被呼叫
protected void call()
}
舉例乙個繼承phone的子類folder樣式手機
public class folderphone extends phone
//重寫父類的call,呼叫父類的call方法,即保留品牌手機的操作,再加上樣式的特點,完成手機的功能實現
public void call()
}
而client呼叫時,只需要指定型別建立
//指定摺疊手機中的vivo品牌,便完成乙個完整的手機
phone phone = new folderphone(new vivo());
以上則通過橋接模式完成乙個手機功能,整個系統具有擴充套件性
jdbc在使用driver獲取connection中使用了橋接模式,但是和我們所說的結構有所不同,drivermanager不是乙個抽象,但他使用的橋接模式的大致結構。
訊息管理
設計模式之橋接模式
public class test 兩個維度 乙個是具體產品,如狗 豬 乙個是抽象產品,如溫順的動物 冷酷的動物 排列組合 如溫順的狗 冷酷的豬等 abstract class animal 該橋接類的引入是關鍵 abstract class animalbridge extends animal ...
設計模式之 橋接模式
今天來學習橋接模式,在我們日常生活中,有很多的事物是可以 多維度 的變化的,比如我們去吃麵條,有雞絲面和牛肉麵兩種,每一種面又分為辣味的和不辣的,而且每種面可能會分為大碗小碗的。很多事物能夠變化的維度不止一種,甚至數十種,那麼我們在 上怎麼應對這些變化呢?每乙個都單獨弄乙個類顯然不是什麼好辦法。那麼...
設計模式之橋接模式
在軟體系統中,某些型別由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種 多維度的變化 如何利用物件導向的技術來使得該型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度?這就要使用橋接模式。現在有咖啡,按大小分可以分為中杯和大杯,按型別可以分為拿鐵和摩卡,所以現在總共有四中咖啡,中...