设计模式之结构型(4)-桥接模式(Bridge)
(一)定義:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。(將一個對象多維度的變化分離)
① 橋接模式主要用意是為了實現抽象部分與實現部分脫耦,使它們各自可以獨立變化。
② 在開發過程中通常會遇到一個對象有兩個變化維度,而且這兩個維度變化地非常劇烈,這種變化導致了縱橫交錯的結果,使對象的設計變得困難,并且在對象數量上和可擴展性上都帶來了很大的麻煩。此時我們應當把這兩個變化比較劇烈的維度拆離,然后用組合的方式把它們結合在一起。這就是橋接器模式的思想
相關模式:適配器模式,策略模式
1.1 UML定義類圖
1.2 類的定義
示例
場景一:假設用蠟筆畫一幅畫。要使用12種顏色,且有大中小號蠟筆來畫,則需要36種不同的蠟筆。但是如果我們用大中小三種不同的毛筆,再配上12種不同的顏色。則只需要12+3=15個對象就可以完成繪畫。
? 實際上,蠟筆和毛筆的關鍵一個區別在于筆和顏色是否能夠分離。橋梁模式的用意是“將抽象化與實現化脫耦,使得二者可以獨立地變化”。關鍵就在于能否脫耦。蠟筆的顏色和蠟筆本身是分不開的,所以造成必須使用36支色彩、大小各異的蠟筆來繪制圖畫。而毛筆與顏料能夠很好的脫耦,各自獨立變化,便簡化了操作。在這里,抽象層面的概念是:“毛筆用顏料作畫”,而在實現時,毛筆有大中小三號,顏料有紅綠藍等12種,于是便可出現3*12種組合。每個參與者(毛筆與顏料)都可以在自己的自由度上隨意轉換。
? 蠟筆由于無法將筆與顏色分離,造成筆與顏色兩個自由度無法單獨變化,使得只有創建36種對象才能完成任務。橋接模式將繼承關系轉換為組合關系,從而降低了系統間的耦合,減少了代碼編寫量。
代碼public abstract class Brush {protected Color c;public abstract void Paint();public Color Color{set { c = value; }} }public class BigBrush : Brush {public override void Paint(){Console.WriteLine("使用大號毛筆和顏色:{0} 繪畫", c.Name);} }public class SmallBrush : Brush {public override void Paint(){Console.WriteLine("使用小號毛筆和顏色:{0} 繪畫", c.Name);} } public class Color {public string Name { get; set; } }public class Red : Color {public Red(){base.Name = "Red";} }public class Blue : Color {public Blue(){base.Name = "Blue";} }//Main客戶端調用程序 static void Main(string[] args) {Brush brush1 = new BigBrush();brush1.Color = new Red();brush1.Paint();Brush brush2 = new SmallBrush();brush2.Color = new Blue();brush2.Paint();Console.ReadKey(); }
轉載于:https://www.cnblogs.com/lihuali/p/7492940.html
總結
以上是生活随笔為你收集整理的设计模式之结构型(4)-桥接模式(Bridge)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET设置焦点到输入框
- 下一篇: 从零开始编写自己的C#框架(9)——数据