欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET橋接模式講解

 更新時間:2016年11月29日 11:35:00   作者:Yangyi.He  
這篇文章主要為大家詳細介紹了ASP.NET橋接模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

橋接模式的定義:

將抽象化(Abstraction)與實現(xiàn)化(Implementation)脫耦,使得二者可以獨立地變化。

橋接模式結(jié)構(gòu)圖:


橋接模式中得角色:

抽象化(Abstraction)角色:抽象化給出的定義,并保存一個對實現(xiàn)化對象的引用。
修正抽象化(Refined Abstraction)角色:擴展抽象化角色,改變和修正父類對抽象化的定義。
實現(xiàn)化(Implementor)角色:這個角色給出實現(xiàn)化角色的接口,但不給出具體的實現(xiàn)。必須指出的是,這個接口不一定和抽象化角色的接口定義相同, 實際上,這兩個接口可以非常不一樣。實現(xiàn)化角色應(yīng)當(dāng)只給出底層操作,而抽象化角色應(yīng)當(dāng)只給出基于底層操作的更高一層的操作。

結(jié)合實例說明:

引用一個電視遙控器的例子,對于每一個牌子的遙控器,都有相呼應(yīng)的遙控器來控制,這時候我們想到的設(shè)可能是:抽象一個遙控器接口,里面有待實現(xiàn)的開機,關(guān)機,換頻道這樣一組功能方法。然后創(chuàng)建具體的遙控器類去繼承這個接口,實現(xiàn)里面的方法。這樣可以滿足每個電視機都實現(xiàn)了自己的遙控器,對于新增了其他類型的 電視機,只需要添加一個派生類就可以滿足新的遙控器的派生。但是哪一天,用戶要求在遙控中加入一個返回上一個頻道的功能時候,就需要改變抽象出來的遙控器 接口,需要向抽象類中添加一個新的方法,這樣就改變了抽象類的實現(xiàn)。如果用戶要求同時改變電視機的產(chǎn)品行為,和遙控器的行為方法,對于上面的設(shè)計會造成很 大的改動。使用橋接模式可以很好的解決這些問題。

使用:

1.首先抽象出電視機,提供遙控器改變的行為方法。

 /// <summary>
 /// 電視機,提供抽象方法
 /// </summary>
 public abstract class TV
 {
  public abstract void On();
  public abstract void Off();
  public abstract void tuneChannel();
 }

2.創(chuàng)建具體的電視機,繼承自抽象電視機類:

 /// <summary>
 /// 三星牌電視機,重寫基類的抽象方法
 /// </summary>
 public class Samsung:TV
 {
  public override void On()
  {
   Console.WriteLine("三星牌電視機已經(jīng)打開了");
  }

  public override void Off()
  {
   Console.WriteLine("三星牌電視機已經(jīng)關(guān)掉了");
  }

  public override void tuneChannel()
  {
   Console.WriteLine("三星牌電視機換頻道");
  }
 }

 /// <summary>
 /// 長虹牌電視機,重寫基類的抽象方法
 /// 提供具體的實現(xiàn)
 /// </summary>
 public class ChangHong : TV
 {
  public override void On()
  {
   Console.WriteLine("長虹牌電視機已經(jīng)打開了");
  }

  public override void Off()
  {
   Console.WriteLine("長虹牌電視機已經(jīng)關(guān)掉了");
  }

  public override void tuneChannel()
  {
   Console.WriteLine("長虹牌電視機換頻道");
  }
 }

3.然后抽象出概覽中的遙控器,扮演抽象話的角色。

 /// <summary>
 /// 抽象概念中的遙控器,扮演抽象化角色
 /// </summary>
 public abstract class RemoteControl
 {
  public TV implementor { get; set; }

  /// <summary>
  /// 開電視機
  /// 這里抽象類中不再提供實現(xiàn)了,而是調(diào)用實現(xiàn)類中的實現(xiàn)
  /// </summary>
  public virtual void On()
  {
   implementor.On();
  }

  /// <summary>
  /// 關(guān)電視機
  /// </summary>
  public virtual void Off()
  {
   implementor.Off();
  }

  /// <summary>
  /// 換頻道
  /// </summary>
  public virtual void SetChannel()
  {
   implementor.tuneChannel();
  }
 }

4.創(chuàng)建具體遙控器類:這里面,我重寫了更換頻道的方法,其實還可以重寫其他的方法。

 /// <summary>
 /// 具體遙控器類
 /// </summary>
 public class ConcreteRemote:RemoteControl
 {
  /// <summary>
  /// 重寫更換頻道方法
  /// </summary>
  public override void SetChannel()
  {
   Console.WriteLine("重寫更換頻道方法");
   base.SetChannel();
  }
 }

5.調(diào)用:

static void Main(string[] args)
  {
   // 創(chuàng)建一個遙控器
   RemoteControl remoteControl = new ConcreteRemote();
   
   //長虹電視機
   remoteControl.implementor = new ChangHong();
   remoteControl.On();
   remoteControl.SetChannel();
   remoteControl.Off();
   Console.WriteLine();

   // 三星牌電視機
   remoteControl.implementor = new Samsung();
   remoteControl.On();
   remoteControl.SetChannel();
   remoteControl.Off();
   Console.Read();
  }

這樣接實現(xiàn)了橋接模式的設(shè)計,遙控器的功能實現(xiàn)方法不是在遙控器中去實現(xiàn)了,而是將實現(xiàn)部分用來另一個電視機類去封裝它,遙控器中只包含電視機類的一個引用,通過橋接模式,我們把抽象化和實現(xiàn)化部分分離開了,這樣可以很好應(yīng)對這兩方面的變化。

優(yōu)點:

抽象接口與其實現(xiàn)解耦,期中的抽象和實現(xiàn)可以獨立的進行擴展,不會影響到對方。

缺點:

增加了系統(tǒng)的復(fù)雜度。

使用場景:

1、如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間添加更多的靈活性,避免在兩個層次之間建立靜態(tài)的聯(lián)系
2、設(shè)計要求實現(xiàn)化角色的任何改變不應(yīng)當(dāng)影響客戶端,或者實現(xiàn)化角色的改變對客戶端是完全透明的。
3、需要跨越多個平臺的圖形和窗口系統(tǒng)上
4、一個類存在兩個獨立變化的維度,且兩個維度都需要進行擴展。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 對ASP.Net的WebAPI項目進行測試

    對ASP.Net的WebAPI項目進行測試

    這篇文章介紹了對WebAPI項目進行測試的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • .Net Core和jexus配置HTTPS服務(wù)方法

    .Net Core和jexus配置HTTPS服務(wù)方法

    下面小編就為大家分享一篇.Net Core和jexus配置HTTPS服務(wù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • WPF實現(xiàn)流光動畫特效

    WPF實現(xiàn)流光動畫特效

    這篇文章介紹了WPF實現(xiàn)流光動畫特效的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • asp.net 無限分類

    asp.net 無限分類

    asp.net一個可以添加無限結(jié)點的樹asp.net 無限分級 asp.net 樹型菜單
    2008-02-02
  • asp.net全局變量的實例方法

    asp.net全局變量的實例方法

    在本篇文章里小編給大家整理的是關(guān)于asp.net全局變量的實例方法和實例,需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • ASP.NET控件之RadioButtonList詳解

    ASP.NET控件之RadioButtonList詳解

    這篇文章主要為大家詳細介紹了ASP.NET控件之RadioButtonList的使用方法,感興趣的小伙伴們可以參考一下
    2016-09-09
  • asp.net中CSharpThinking擴展方法分析

    asp.net中CSharpThinking擴展方法分析

    這篇文章主要介紹了asp.net中CSharpThinking擴展方法,實例講述了擴展方法的特征及應(yīng)用,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • 淺談ASP.NET中多層架構(gòu)

    淺談ASP.NET中多層架構(gòu)

    Asp.net的多層架構(gòu)主要是為了解決數(shù)據(jù)層,邏輯層,表示層等之間的關(guān)系。我的做法是這樣的:首先建立一個DataCore的基類?;惱锩娣庋b了一些低層的數(shù)據(jù)庫的基本操作,比如說數(shù)據(jù)庫聯(lián)接,調(diào)用存儲過程等等。
    2015-06-06
  • asp.net repeater手寫分頁實例代碼

    asp.net repeater手寫分頁實例代碼

    想用repeater實現(xiàn)手寫分頁的代碼,想自己控制各種樣式的朋友,可以用用。
    2009-05-05
  • asp.net 購物車實現(xiàn)詳細代碼

    asp.net 購物車實現(xiàn)詳細代碼

    asp.net 購物車實現(xiàn)詳細代碼
    2008-11-11

最新評論