最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET橋接模式講解

 更新時間:2016年11月29日 11:35:00   作者:Yangyi.He  
這篇文章主要為大家詳細(xì)介紹了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)可以獨立的進(jì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、一個類存在兩個獨立變化的維度,且兩個維度都需要進(jìn)行擴展。

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

相關(guān)文章

  • asp.net 計算字符串中各個字符串出現(xiàn)的次數(shù)

    asp.net 計算字符串中各個字符串出現(xiàn)的次數(shù)

    比如一個字符串"a,b,a,c,b,b,d",現(xiàn)在我們要統(tǒng)計每個字符串出現(xiàn)次數(shù)。解決這個問題,我們可以使用泛型集合 Dictionary(TKey,TValue)。它有一個key值用來存儲字符串和一個value值,用來存儲字符串出現(xiàn)的次數(shù)
    2012-05-05
  • asp.net通過Ajax UpdatePanel回傳后滾動條位置變更解決方法

    asp.net通過Ajax UpdatePanel回傳后滾動條位置變更解決方法

    用一個隱藏控件保存當(dāng)前scorll值?;貍骰貋砗蟾鶕?jù)scroll的值在重新設(shè)置scroll。
    2010-06-06
  • asp.net core 實現(xiàn)一個簡單的倉儲的方法

    asp.net core 實現(xiàn)一個簡單的倉儲的方法

    本篇文章主要介紹了asp.net core 實現(xiàn)一個簡單的倉儲的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • asp.net中各種類型的JSON格式化

    asp.net中各種類型的JSON格式化

    asp.net中各種類型的JSON格式化實現(xiàn)代碼,需要的朋友可以參考下。
    2011-12-12
  • 詳解.NET Core使用Quartz執(zhí)行調(diào)度任務(wù)進(jìn)階

    詳解.NET Core使用Quartz執(zhí)行調(diào)度任務(wù)進(jìn)階

    這篇文章主要介紹了.NET Core使用Quartz執(zhí)行調(diào)度任務(wù)進(jìn)階,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解如何在ASP.NET Core中編寫高效的控制器

    詳解如何在ASP.NET Core中編寫高效的控制器

    這篇文章主要介紹了詳解如何在ASP.NET Core中編寫高效的控制器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 解析如何利用一個ASP.NET Core應(yīng)用來發(fā)布靜態(tài)文件

    解析如何利用一個ASP.NET Core應(yīng)用來發(fā)布靜態(tài)文件

    本文主要通過一些簡單的實例來體驗一下如何在一個ASP.NET Core應(yīng)用中發(fā)布靜態(tài)文件。針對不同格式的靜態(tài)文件請求的處理,ASP.NET Core為我們提供了三個中間件,它們將是本系列文章論述的重點。有需要的朋友可以看下
    2016-12-12
  • ASP.NET Core中如何利用Csp標(biāo)頭對抗Xss攻擊

    ASP.NET Core中如何利用Csp標(biāo)頭對抗Xss攻擊

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何利用Csp標(biāo)頭對抗Xss攻擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • ASP.NET MVC視圖尋址

    ASP.NET MVC視圖尋址

    這篇文章介紹了ASP.NET MVC視圖尋址的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • 一步步打造簡單的MVC電商網(wǎng)站BooksStore(1)

    一步步打造簡單的MVC電商網(wǎng)站BooksStore(1)

    這篇文章主要和大家一起一步步打造一個簡單的MVC電商網(wǎng)站,MVC電商網(wǎng)站BooksStore第一篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

中江县| 杨浦区| 綦江县| 舒城县| 济阳县| 卢氏县| 台东县| 龙泉市| 奎屯市| 枞阳县| 绥阳县| 凉城县| 中江县| 福贡县| 克拉玛依市| 二连浩特市| 专栏| 无锡市| 司法| 虎林市| 陆川县| 搜索| 梨树县| 封开县| 青河县| 镶黄旗| 雷波县| 灵宝市| 东至县| 无为县| 洪洞县| 沁水县| 香港 | 吉木乃县| 临泉县| 察雅县| 梁河县| 江永县| 闸北区| 梅州市| 曲阳县|