国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# 設計模式系列教程-橋接模式

2020-01-24 01:08:29
字體:
來源:轉載
供稿:網友

1. 概述

  將抽象部分(Abstraction)與實現部分(Implementor)分離,使它們可以獨立地變化。

2. 解決的問題  

  在軟件系統中,有些類型由于自身的邏輯,它具有兩個或多個維度的變化。為了解決這種多維度變化,又不引入復雜度,這就要使用Bridge模式。

3. 模式中的角色

  2.1 抽象(Abstraction):定義抽象接口,該接口中包含實現具體行為、具體特征的Implementor接口。

  2.2 提煉的抽象(RefinedAbstraction):繼承自Abstraction的子類,依舊是一個抽象的事物名。

  2.3 實現(Implementor):定義具體行為,具體特征的應用接口。

  2.4 具體實現(ConcreteImplementor):實現Implementor。

4. 模式解讀

  4.1 實現要點

    Bridge模式使用“對象間的組合/聚合關系”解耦了抽象和實現之間固有的綁定關系,使得抽象和實現可以沿著各自的維度來變化

  4.2 橋接模式的類圖  

http://files.VeVB.COm/file_images/article/201606/2016060111102425.png

  4.3 橋接模式的實現代碼

 /// <summary> /// 實現 /// </summary> public abstract class Implementor {  public abstract void Opration(); } public class ConcreteImplementorA : Implementor {  public override void Opration()  {   Console.WriteLine("具體實現A的方法執行。");  } } public class ConcreteImplementorB : Implementor {  public override void Opration()  {   Console.WriteLine("具體實現B的方法執行。");  } } /// <summary> /// 抽象 /// </summary> public abstract class Abstraction {  protected Implementor implementor;  public void SetImplementor(Implementor implementor)  {   this.implementor = implementor;  }  public abstract void Opration(); } /// <summary> /// 被提煉的抽象 /// </summary> public class RefinedAbstraction : Abstraction {  public override void Opration()  {   implementor.Opration();  } }

  4.4 客戶端的調用

 class Program {  static void Main(string[] args)  {   Abstraction abstraction = new RefinedAbstraction();   abstraction.SetImplementor(new ConcreteImplementorA());   abstraction.Opration();   abstraction.SetImplementor(new ConcreteImplementorB());   abstraction.Opration();   Console.Read();  } }

  輸出結果:

  具體實現A的方法執行。
  具體實現B的方法執行。

5. 橋接模式是個比較復雜的模式,在對它總結之前,先看一個大家都非常熟悉的應用:三層架構  

http://files.VeVB.COm/file_images/article/201606/2016060111102426.png

  解讀:三層架構中的業務邏輯層(LogicalTierInterface)橋接到了數據訪問層(DatabaseTierInterface),大家可以比較一下這個圖和上面橋接模式的圖是多么的一致。大家往往會在數據庫訪問這端做擴展,比如現在增加對MySql的支持;往往只對業務邏輯層的實現(LogicalImplement)做一些內部修改,而不是擴展一個新的實現。如果你的應用確實需要對業務邏輯層做一個擴展(比如NewLogicalImplement),那么這個三層架構對橋接模式的應用就算是比較完整的了。

6. 模式總結

  6.1 優點

    6.1.1 降低了沿著兩個或多個維度擴展時的復雜度,防止類的過度膨脹。

    6.1.2 解除了兩個或多個維度之間的耦合,使它們沿著各自方向變化而不互相影響

  6.2 缺點

    還未發現

  6.3 適用場景

    6.3.1 當一個對象有多個變化因素時,可以考慮使用橋接模式,通過抽象這些變化因素,將依賴具體實現修改為依賴抽象。

    6.3.2 當我們期望一個對象的多個變化因素可以動態變化,而且不影響客戶端的程序使用時。

    6.3.3 如果使用繼承的實現方案,會導致產生很多子類,任何一個變化因素都需要產生多個類來完成,就要考慮橋接模式。

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐县| 海南省| 巴东县| 新密市| 金沙县| 泰顺县| 红河县| 松江区| 花莲县| 安阳县| 天津市| 北碚区| 皮山县| 顺平县| 苗栗市| 广宗县| 泰州市| 孝昌县| 镇坪县| 塔城市| 中西区| 洪湖市| 桦川县| 塔城市| 滦南县| 贺州市| 铁岭市| 芦山县| 两当县| 东山县| 竹北市| 偃师市| 永和县| 交城县| 河北区| 海阳市| 山阴县| 临漳县| 吉林市| 武胜县| 调兵山市|