【问题标题】:Decorators and Virtual Methods装饰器和虚拟方法
【发布时间】:2010-10-14 22:02:04
【问题描述】:

装饰器设计模式是扩展类功能的一个很好的解决方案。例如,如果我想要现有类方法的预处理和后处理方法,我可以创建一个装饰器并覆盖基类中的现有方法,并分别调用我的预处理和后处理方法。

我的问题是,在应用程序设计过程中很少会出现上述要求。我不能将我创建的所有方法都标记为虚拟方法,以便它们可以被装饰器覆盖。因此,我将不得不求助于方法隐藏。

有没有更好的方法来设计我的类,以便在我想要覆盖任何方法的情况下,它可以以最好的方式完成。

【问题讨论】:

    标签: c# design-patterns ooad


    【解决方案1】:

    您是否考虑过使用方面(AOP)? - 在您写下评论后添加: 你可以看看 log4postsharp 项目,看看他们是如何在方法上使用属性的。 Log4PostSharp

    如果您使用 f.ex Reflector 编译并打开 dll,您将看到 pre-和 post-actions 是在运行时添加的。

    -这种行为也可以使用 xml-configs 来添加

    【讨论】:

    • 你能给我一个例子来使用 AOP 概念做上述事情吗?
    【解决方案2】:

    通常当我装饰一个类时,我是通过组合而不是继承来完成的。这样你就不需要覆盖任何东西。

    【讨论】:

    • 您仍然需要提取您的装饰器类(以及被装饰的类)可以实现的接口定义,否则这通常不起作用。
    • 当然。我习惯性地将具体类隐藏在基于角色的接口后面。
    猜你喜欢
    • 2016-02-10
    • 2010-10-16
    • 2012-09-11
    • 2021-12-17
    • 1970-01-01
    • 2020-01-11
    • 2014-01-14
    • 2020-05-01
    • 2013-07-19
    相关资源
    最近更新 更多