我遇到过一种被称为“处理程序模式”的设计模式,但我在任何地方都找不到对此模式的任何实际引用。它基本上只是一个方法接口,允许您轻松地在后端扩展功能,而不需要客户端重新编译。对于必须处理许多不同类型的请求的web服务来说可能是有用的。下面是一个例子:
public interface IHandler
{
IDictionary<string, string> Handle(IDictionary<string, string> args);
}args通常包含一个类似于"Action“的键,该键的值告诉实现要做什么。可以传入额外的参数,为impl提供更多信息。然后,impl传回客户端“应该”理解的任意参数列表。
这是一种反模式,还是另一种伪装的模式?是否推荐这种类型的设计?
编辑:更多信息:根据我所见的实现方式,“根”处理程序将充当其他具体处理程序的分派器(也许?)。根处理程序有一个"HandlerResolver“,它根据消息的内容决定哪个具体处理程序应该获取消息。也许它实际上类似于"dispatcher“模式,尽管我也不知道这是否真的是一种模式。我猜它还可以在根中有一个责任链模式,它允许您将一堆具体的处理程序链接在一起,然后让它们决定哪个处理程序来处理它。
发布于 2009-03-13 04:36:33
这是在没有闭包的语言上做闭包的OOP方法。它没有一个“模式”的名字,因为在函数式语言中,它是显而易见的工作方式。在OOP语言中,OTOH,你必须做一些工作,所以它看起来是一个可以命名的习语。“‘Handler”听起来不错。
(它不是单例,BTW)
发布于 2009-03-13 04:20:58
我以"SingletonRegistry“的名字使用它
请参阅this thread
我已经用过几次了。特别是当要采取的操作是未知的(在设计的第一阶段),或者应用程序应该支持极端的灵活性时。
我从文件或数据库加载字典,并创建类的一个实例,该实例将在某个“键”下处理请求。
我在网上搜索这个名字的时候发现了这个class also。
看起来不是一样的吗?
发布于 2009-03-13 04:26:56
因为您的帖子中有"Action“一词,所以我相信这可能是Command模式的一部分。查看Wiki并搜索"Handler"...也许这会让你有更多的洞察力。
http://en.wikipedia.org/wiki/Command_pattern
https://stackoverflow.com/questions/641426
复制相似问题