bridge pattern
use the bridge pattern to vary not only you rimplementations, but also your abstractions.
模式類圖
橋接模式包含如下角色:
•abstraction:抽象類
•refinedabstraction:擴充抽象類
•implementor:實現類介面
•concreteimplementor:具體實現類
模式動機
設想如果要繪製矩形、圓形、橢圓、正方形,我們至少需要4個形狀類,但是如果繪製的圖形需要具有不同的顏色,如紅色、綠色、藍色等,此時至少有如下兩種設計方案
• 第一種設計方案是為每一種形狀都提供一套各種顏色的版本。
• 第二種設計方案是根據實際需要對形狀和顏色進行組合。
對於有兩個變化維度(即兩個變化的原因)的系統,採用方案二來進行設計系統中類的個數更少,且系統擴充套件更為方便。設計方案二即是橋接模式的應用。橋接模式將繼承關係轉換為關聯關係,從而降低了類與類之間的耦合,減少了**編寫量。
模擬案例一
• 現需要提供大中小3種型號的畫筆,能夠繪製5種不同顏色,如果使用蠟筆,我們需要準備3*5=15支蠟筆,也就是說必須準備15個具體的蠟筆類。而如果使用毛筆的話,只需要3種型號的毛筆,外加5個顏料盒,用3+5=8個類就可以實現15支蠟筆的功能。本例項使用橋接模式來模擬毛筆的使用過程。
模式優缺點
優點
• 分離抽象介面及其實現部分。
• 橋接模式有時類似於多繼承方案,但是多繼承方案違背了類的單一職責原則(即乙個類只有乙個變化的原因),復用性比較差,而且多繼承結構中類的個數非常龐大,橋接模式是比多繼承方案更好的解決方法。
• 橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴充套件乙個維度,都不需要修改原有系統。
• 實現細節對客戶透明,可以對使用者隱藏實現細節。
缺點
• 橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計與程式設計。
• 橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用範圍具有一定的侷限性。
**自 windsun
設計模式之橋接模式
public class test 兩個維度 乙個是具體產品,如狗 豬 乙個是抽象產品,如溫順的動物 冷酷的動物 排列組合 如溫順的狗 冷酷的豬等 abstract class animal 該橋接類的引入是關鍵 abstract class animalbridge extends animal ...
設計模式之 橋接模式
今天來學習橋接模式,在我們日常生活中,有很多的事物是可以 多維度 的變化的,比如我們去吃麵條,有雞絲面和牛肉麵兩種,每一種面又分為辣味的和不辣的,而且每種面可能會分為大碗小碗的。很多事物能夠變化的維度不止一種,甚至數十種,那麼我們在 上怎麼應對這些變化呢?每乙個都單獨弄乙個類顯然不是什麼好辦法。那麼...
設計模式之橋接模式
在軟體系統中,某些型別由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種 多維度的變化 如何利用物件導向的技術來使得該型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度?這就要使用橋接模式。現在有咖啡,按大小分可以分為中杯和大杯,按型別可以分為拿鐵和摩卡,所以現在總共有四中咖啡,中...