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

解析C#設(shè)計模式編程中的裝飾者模式

 更新時間:2016年02月17日 17:43:31   作者:張龍豪  
這篇文章主要介紹了C#設(shè)計模式編程中的裝飾者模式,同時也談到了其在.NET框架中的應(yīng)用,需要的朋友可以參考下

裝飾者模式定義:不通過派生類增改類屬性動作,而是通過模式設(shè)計動態(tài)的達(dá)到這種效果,而且比繼承更方便靈活減少程序的復(fù)雜性。

舉例

汪峰打造冠軍團(tuán)隊。

首先團(tuán)隊類為空,經(jīng)過汪峰不斷的努力,為團(tuán)隊爭取學(xué)員,也為團(tuán)隊隊員打造合適的平臺,讓其發(fā)揮。

團(tuán)隊不斷的變強(qiáng),變完整,是由裝飾者,根據(jù)不同的需求,給基類進(jìn)行增改,一致最后贏得你的贊同,滿足你的需求。

實現(xiàn)裝配器模式的類圖:

2016217174042765.png (656×437)

戰(zhàn)隊組建代碼

 //汪峰戰(zhàn)隊
  abstract class WangFengTeam
  {
    //執(zhí)行策劃命令
    abstract public void Acrion();
  }

  //學(xué)員
  class Student : WangFengTeam
  {
    // Methods
    override public void Acrion()
    {
      Console.WriteLine("汪峰團(tuán)隊學(xué)員情況:");
    }
  }

  // 戰(zhàn)隊總策劃
  abstract class Direct : WangFengTeam
  {
    //汪峰戰(zhàn)隊
    protected WangFengTeam team;

    // 策劃活動
    public void SetComponent(WangFengTeam team)
    {
      this.team = team;
    }
    //執(zhí)行策劃
    override public void Acrion()
    {
      if (team != null)
      {
        team.Acrion();
      }
    }
  }

  //男孩唱狂放型的,構(gòu)建一個組合。
  class BoyTeam : Direct
  {
    // 組合名稱
    public string teamName= "鋒利的Jquery";

    //具體策劃
    override public void Acrion()
    {
      base.Acrion();
      Console.WriteLine("我是汪峰團(tuán)隊,狂放型的。");
    }
  }

  //女孩唱婉約型的,來個模特表演
  class GrilTeam : Direct
  {
    //具體策劃
    override public void Acrion()
    {
      base.Acrion();      

      Console.WriteLine("我是汪峰團(tuán)隊,婉約型的。");

      //模特表演
      show();
    }

    public void show()
    {
      Console.WriteLine("婉約型,走秀");
    }
  }

客戶端代碼:

 public static void Main()
    {
      Student team = new Student();
      BoyTeam boy = new BoyTeam();
      GrilTeam girl = new GrilTeam();

      //團(tuán)隊男孩裝飾
      boy.SetComponent(team);
      //團(tuán)隊女孩裝飾
      girl.SetComponent(boy);
      girl.Acrion();
      Console.Read();
    }


裝飾者模式的優(yōu)缺點
看完裝飾者模式的詳細(xì)介紹之后,我們繼續(xù)分析下它的優(yōu)缺點。

優(yōu)點:

  • 裝飾這模式和繼承的目的都是擴(kuò)展對象的功能,但裝飾者模式比繼承更靈活
  • 通過使用不同的具體裝飾類以及這些類的排列組合,設(shè)計師可以創(chuàng)造出很多不同行為的組合
  • 裝飾者模式有很好地可擴(kuò)展性

缺點:

裝飾者模式會導(dǎo)致設(shè)計中出現(xiàn)許多小對象,如果過度使用,會讓程序變的更復(fù)雜。并且更多的對象會是的差錯變得困難,特別是這些對象看上去都很像。

使用場景
下面讓我們看看裝飾者模式具體在哪些情況下使用,在以下情況下應(yīng)當(dāng)使用裝飾者模式:
需要擴(kuò)展一個類的功能或給一個類增加附加責(zé)任。
需要動態(tài)地給一個對象增加功能,這些功能可以再動態(tài)地撤銷。
需要增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能


.NET中裝飾者模式的實現(xiàn)
在.NET 類庫中也有裝飾者模式的實現(xiàn),該類就是System.IO.Stream,下面看看Stream類結(jié)構(gòu):

2016217174213251.png (562×255)

BufferedStream、CryptoStream和GZipStream其實就是兩個具體裝飾類,這里的裝飾者模式省略了抽象裝飾角色(Decorator)。下面演示下客戶端如何動態(tài)地為MemoryStream動態(tài)增加功能的。

MemoryStream memoryStream = new MemoryStream(new byte[] {95,96,97,98,99});
      // 擴(kuò)展緩沖的功能
      BufferedStream buffStream = new BufferedStream(memoryStream);
      // 添加加密的功能
      CryptoStream cryptoStream = new CryptoStream(memoryStream,new AesManaged().CreateEncryptor(),CryptoStreamMode.Write);
      // 添加壓縮功能
      GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true);

總結(jié)
到這里,裝飾者模式的介紹就結(jié)束了,裝飾者模式采用對象組合而非繼承的方式實現(xiàn)了再運(yùn)行時動態(tài)地擴(kuò)展對象功能的能力,而且可以根據(jù)需要擴(kuò)展多個功能,避免了單獨使用繼承帶來的 ”靈活性差“和”多子類衍生問題“。同時它很好地符合面向?qū)ο笤O(shè)計原則中 ”優(yōu)先使用對象組合而非繼承“和”開放-封閉“原則。

相關(guān)文章

最新評論