亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

.NET橋接模式講解

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

橋接模式的定義:

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

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


橋接模式中得角色:

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

結(jié)合實(shí)例說明:

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

使用:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 /// <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)建一個(gè)遙控器
   RemoteControl remoteControl = new ConcreteRemote();
   
   //長(zhǎng)虹電視機(jī)
   remoteControl.implementor = new ChangHong();
   remoteControl.On();
   remoteControl.SetChannel();
   remoteControl.Off();
   Console.WriteLine();

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

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

優(yōu)點(diǎn):

抽象接口與其實(shí)現(xiàn)解耦,期中的抽象和實(shí)現(xiàn)可以獨(dú)立的進(jìn)行擴(kuò)展,不會(huì)影響到對(duì)方。

缺點(diǎn):

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

使用場(chǎng)景:

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

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

相關(guān)文章

  • 對(duì)ASP.Net的WebAPI項(xiàng)目進(jìn)行測(cè)試

    對(duì)ASP.Net的WebAPI項(xiàng)目進(jìn)行測(cè)試

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

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

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

    WPF實(shí)現(xiàn)流光動(dòng)畫特效

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

    asp.net 無限分類

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

    asp.net全局變量的實(shí)例方法

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

    ASP.NET控件之RadioButtonList詳解

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

    asp.net中CSharpThinking擴(kuò)展方法分析

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

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

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

    asp.net repeater手寫分頁實(shí)例代碼

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

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

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

最新評(píng)論