命名该模式:使用谓词处理程序对象的集合作为策略

时间:2012-02-12 20:21:37

标签: oop design-patterns

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);
        }
    }
}

这包括战略和责任链模式的各个方面,也许还有规范模式。

与典型的策略模式实现不同,策略选择由处理程序对象本身(如责任链和规范)执行,并且可以应用一个或多个策略(取决于实现)。

与责任链模式不同,没有链 - 处理程序不是分层组合的,不是彼此了解的,而且可能再次调用多个处理程序。

这似乎是支持可扩展性(尊重依赖性倒置和开放/封闭原则)的一种非常常见的模式,但我无法为其命名。我已经看过“处理程序模式”这个术语,但这似乎又是另一回事了。

谁能告诉我这个模式叫什么?

1 个答案:

答案 0 :(得分:0)

在某些方面看起来与观察者模式非常相似。 IMessageHandler是观察者,MessageProcessor是“观察对象”。无可否认,处理程序在构造期间传递给MessageProcessor,而不是通过方法添加/删除,并且在构造期间调用处理程序而不是响应观察对象中的某些“更改”。