使用Stream类的代理模式:实际代理还是装饰器?

时间:2014-01-23 18:26:43

标签: c# design-patterns proxy-pattern

通过阅读Judith Bishop的书“C#3.0设计模式”,我是刚开始潜入设计模式世界的新手。

作为代理章节末尾的练习,作者建议使用代理模式实现一个“拦截,监视和记录对Stream方法的每次调用”的自定义类。

我有点不确定我带来了什么,我想征求意见。在我放弃了一些想法之后(例如,从一个接口公开一些最常用的Stream方法开始),我最终创建了一个继承自Stream并覆盖其某些方法的类。这个类还有一个FileStream属性,我用它来调用实际的Stream方法和属性,我以前用这些方法包装来记录每个调用:

    public class MyStream : Stream
    {
        private FileStream _stream;

        public MyStream()
        {
            _stream = new FileStream();
        }

        public override bool CanRead
        {
            get 
            {
                LogCall("CanRead");
                return _stream.CanRead;
            }
        }

        //More stream methods to override...
    }

但是,这对我来说更像是装饰者。此外,自演习以来一个“坏”装饰者询问“流方法”,我使用“FileStream”作为实际类。

我觉得这不是代理模式的最准确的例子,我有点不确定我是否理解了这个练习。

关于我应该如何进行这项练习的任何建议? 提前谢谢,

0 个答案:

没有答案