解析C#设计模式编程中的装饰者模式

2019-12-26 17:37:14丽君

 

装饰者模式的优缺点
看完装饰者模式的详细介绍之后,我们继续分析下它的优缺点。

优点:

  • 装饰这模式和继承的目的都是扩展对象的功能,但装饰者模式比继承更灵活
  • 通过使用不同的具体装饰类以及这些类的排列组合,设计师可以创造出很多不同行为的组合
  • 装饰者模式有很好地可扩展性

    缺点:

    装饰者模式会导致设计中出现许多小对象,如果过度使用,会让程序变的更复杂。并且更多的对象会是的差错变得困难,特别是这些对象看上去都很像。

    使用场景
    下面让我们看看装饰者模式具体在哪些情况下使用,在以下情况下应当使用装饰者模式:
    需要扩展一个类的功能或给一个类增加附加责任。
    需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
    需要增加由一些基本功能的排列组合而产生的非常大量的功能


    .NET中装饰者模式的实现
    在.NET 类库中也有装饰者模式的实现,该类就是System.IO.Stream,下面看看Stream类结构:

    解析C#设计模式编程中的装饰者模式

     

    BufferedStream、CryptoStream和GZipStream其实就是两个具体装饰类,这里的装饰者模式省略了抽象装饰角色(Decorator)。下面演示下客户端如何动态地为MemoryStream动态增加功能的。

    
    MemoryStream memoryStream = new MemoryStream(new byte[] {95,96,97,98,99});
          // 扩展缓冲的功能
          BufferedStream buffStream = new BufferedStream(memoryStream);
          // 添加加密的功能
          CryptoStream cryptoStream = new CryptoStream(memoryStream,new AesManaged().CreateEncryptor(),CryptoStreamMode.Write);
          // 添加压缩功能
          GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true);