小编Amb*_*dex的帖子

装饰模式,通过继承或依赖注入?

现在我正在研究常见的设计模式,并且在很大程度上我理解了装饰模式的目的.但我没有得到的是,在装饰器类中包装现有对象的目的是什么?

考虑这种情况,因为Progress是观察者模式的一部分,我想限制其订阅者的更新量以防止UI线程锁定.

所以我把类修饰为每50毫秒只更新一次.

public class ProgressThrottle<T> : Progress<T>
{
    private DateTime _time = DateTime.Now;
    public ProgressThrottle(Action<T> handler) : base(handler)
    {
    }

    protected override void OnReport(T value)
    {
        if (DateTime.Now.AddMilliseconds(50) < _time)
        {
            base.OnReport(value);
            _time = DateTime.Now;
        }
    }
}

public class ProgressThrottle2<T> : IProgress<T>
{
    private DateTime _time = DateTime.Now;

    private readonly IProgress<T> _wrapper;

    public ProgressThrottle2(IProgress<T> wrapper)
    {
        _wrapper = wrapper;
    }

    public void Report(T value)
    {
        if (DateTime.Now.AddMilliseconds(50) < _time)
        {
             _wrapper.Report(value);
            _time = DateTime.Now;

        }
    }
Run Code Online (Sandbox Code Playgroud)

这两个类完成相同的事情,除了我发现第一个版本更好,因为它允许我使用基础构造函数来设置进度更新的委托.基类已经支持覆盖该方法,那么我需要包装对象是什么?

这两个类都是装饰器模式的例子吗?我宁愿使用第一个选项,但我很少以这种方式看到例子.

c# design-patterns decorator

5
推荐指数
1
解决办法
530
查看次数

标签 统计

c# ×1

decorator ×1

design-patterns ×1