.Net Framework源代碼中的模式之Decorator(裝飾模式)

發布時間: 2010-07-20 10:11  閱讀: 991 次  推薦: 0   原文鏈接   [收藏]  

  動態地給一個對象添加一些額外的職責。就擴展功能而言,Decorator模式比生成子類方式更為靈活。

Decorator(裝飾模式)

  以.NET Framework 2.0 System.IO中類為例。

System.IO

 

 
System.IO.Stream
public abstract class Stream : MarshalByRefObject, IDisposable
{
  public abstract int Read([In, Out] byte[] buffer, int offset, int count);
  public abstract void Write(byte[] buffer, int offset, int count);
}
 
System.IO.MemoryStream
public class MemoryStream : Stream
{
  public MemoryStream(byte[] buffer)
  {
  }
  public override int Read([In, Out] byte[] buffer, int offset, int count)
  {
  }
  public override void Write(byte[] buffer, int offset, int count)
  {
  }
}
 
System.IO.FileStream
public class FileStream : Stream
{
  public FileStream(String path, FileMode mode)
  {
  }
  public override int Read([In, Out] byte[] buffer, int offset, int count)
  {
  }
  public override void Write(byte[] buffer, int offset, int count)
  {
  }
}
 
System.IO.BufferedStream
public class BufferedStream : Stream
{
  private Stream _s;
  public BufferedStream(Stream stream)
  {
  }
  public override int Read(byte[] buffer, int offset, int count)
  {
    _s.Read();
  }
  public override void Write(byte[] buffer, int offset, int count)
  {
     _s.Write();
  }
}

   調用代碼

public class Client
 
{
   public static void Main()
  {
    FileStream stream =
new FileStream(@"c:\\C:\WINDOWS\system32\drivers\etc\services", FileMode.Open);
    BufferedStream bufferedStream = new BufferedStream(stream, 1024);
  }
}

  在.NET Framework中,所有的流操作都有一個共同的基類System.IO.Stream,它是一個抽象類,主要包含了Read、Write等行為。針對文件流和內存流的操作,定義了FileStream和MemoryStream類,都繼承Stream類,分別實現不同的讀寫操作。為了提高流的讀寫性能,需要使用緩存Buffer來存放流數據。此時,Buffer的作用對于流的讀寫操作而言,就相當于一個裝飾的作用。

  在以下情況下應當使用裝飾模式:

  • 需要擴展一個類的功能,或給一個類增加附加責任。
  • 需要動態地給一個對象增加功能,這些功能可以再動態地撤銷。
  • 需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關系變得不現實。
0
0
 
標簽:設計模式
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()