从FLC中学习的设计模式系列-结构型模式(2)-装饰
装饰模式是通过包装类动态地往一个类中添加新的行为
装饰模式
http://zh.wikipedia.org/wiki/修饰模式
通过使用修饰模式,可以在运行时扩充一个类的功能。原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。
修饰模式是类继承的另外一种选择。类继承在编译时候增加行为,而装饰模式是在运行时增加行为。
FCL中的装饰模式
在流处理中装饰模式非常常用,典型的就是GZipStream
提供用于压缩和解压缩流的方法和属性。
结构如下:
其中GZipStream 既继承了Stream 又组合了Stream ,相当于一个包装,并在这个包装上提供了压缩等方法。
using (FileStream outFile = File.Create(fi.FullName + ".gz")) { using (GZipStream Compress = new GZipStream(outFile,CompressionMode.Compress)) { // 写入.Compress 流 inFile.CopyTo(Compress); } }