public interface IMessageHandler
{
bool Handles(IMessage message);
void Handle(IMessage message);
}
public class FooMessageHandler : IMessageHandler …
public class BarMessageHandler : IMessageHandler …
public class MessageProcessor
{
public MessageProcessor(IEnumerable<IMessageHandler> handlers) …
public void ProcessMessage(IMessage message)
{
foreach(var handler in _handlers.Where(h => h.Handles(message)))
{
handler.Handle(message);
}
}
}这既有策略模式也有责任链模式,也许还有规范模式。
然而,与典型的策略模式实现不同,策略选择是由处理程序对象本身执行的(如责任链和规范),并且可以应用一个或多个策略(取决于实现)。
与责任链模式不同,没有链--处理程序不是分层组合的,彼此不知道,而且可能会调用多个处理程序。
这似乎是一种非常常见的支持可扩展性的模式(尊重依赖反转和开放/关闭原则),但我无法给它起一个名字。我见过术语“处理程序模式”,但这似乎又是另一回事了。
有人能告诉我这种模式叫什么吗?
发布于 2012-02-13 17:45:43
它在某些方面看起来与观察者模式非常相似。IMessageHandler是观察者,MessageProcessor是“观察对象”。诚然,处理程序是在构造期间传递给MessageProcessor的,而不是通过方法添加/删除的;处理程序是在构造期间调用的,而不是响应观察到的对象中的某些“更改”。
https://stackoverflow.com/questions/9252333
复制相似问题