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);
}
}
}
这包括战略和责任链模式的各个方面,也许还有规范模式。
与典型的策略模式实现不同,策略选择由处理程序对象本身(如责任链和规范)执行,并且可以应用一个或多个策略(取决于实现)。
与责任链模式不同,没有链 - 处理程序不是分层组合的,不是彼此了解的,而且可能再次调用多个处理程序。
这似乎是支持可扩展性(尊重依赖性倒置和开放/封闭原则)的一种非常常见的模式,但我无法为其命名。我已经看过“处理程序模式”这个术语,但这似乎又是另一回事了。
谁能告诉我这个模式叫什么?
答案 0 :(得分:0)
在某些方面看起来与观察者模式非常相似。
IMessageHandler
是观察者,MessageProcessor
是“观察对象”。无可否认,处理程序在构造期间传递给MessageProcessor
,而不是通过方法添加/删除,并且在构造期间调用处理程序而不是响应观察对象中的某些“更改”。