首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >命名该模式:使用谓词处理程序对象的集合作为策略

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

Stack Overflow用户
提问于 2012-02-13 04:21:37
回答 1查看 85关注 0票数 1
代码语言:javascript
运行
复制
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);
        }
    }
}

这既有策略模式也有责任链模式,也许还有规范模式。

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

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

这似乎是一种非常常见的支持可扩展性的模式(尊重依赖反转和开放/关闭原则),但我无法给它起一个名字。我见过术语“处理程序模式”,但这似乎又是另一回事了。

有人能告诉我这种模式叫什么吗?

EN

回答 1

Stack Overflow用户

发布于 2012-02-13 17:45:43

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9252333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档