0

我目前正在努力解决设计问题,我正在寻找一些建议:) 想象一下我有一个 INotificationHandler 对象的集合,并且接口定义如下:

public interface INotificationHandler
{
    void Notify(string message);
}

现在我想为每个 INotificationHandler 实例调用 Notify(...) 。我想为此使用多播委托。然而直到最近我偶然发现了一段代码,其中表达式树用于类似的任务(我想)......不幸的是我不记得我在哪里看到那段代码:(

我主要关心的是性能,因为这种类型的方法调用会非常频繁地发生。 由于它在 Web 应用程序上下文中运行,我可以确定每个实例的方法都被调用了吗?

最终目标是拥有一个单一的“包装”类来调用某种接口类型的所有其他实例。我也想过将其应用于日志记录......

    ILogger dispatcher.Trace(...)  // does nothing itself, only calls other existing ILogger instances.
    --> calls NLogLogger(:ILogger).Trace(...)
    --> calls SomeOtherLogger(:ILogger).Trace(...)
    --> calls SomeOtherLogger2(:ILogger).Trace(...)
    --> calls SomeOtherLogger3(:ILogger).Trace(...)

我这样做的动机是实现一个 NullObject 模式,我可以确保对 ILogger 的任何调用(它将始终是我的委派调度程序类)都会成功。其次,生活 ILogger 实例的数量将根据应用程序配置而有所不同。

非常感谢任何反馈:) 顺便说一句.. 有什么已知的模式吗?想不出一个...

4

1 回答 1

0

你可能想看看中介者设计模式。

您可以callback为给定的消息注册一个:

Mediator.Instance.Register(callback, message);

然后当您通知给定消息时,将调用所有注册的回调:

Mediator.Instance.NotifyColleagues(message, parameters);

这是一个使用委托的示例Action<object>,但更建议使用WeakReference而不是delegates确保垃圾收集。

于 2013-05-28T09:05:02.317 回答