Design patterns 什么设计模式对应于所描述的解决方案

Design patterns 什么设计模式对应于所描述的解决方案,design-patterns,Design Patterns,下面的解决方案非常类似于“处理程序”的概念,但仍然难以找到相应的模式或(模式的组合)。我们将尝试通过简单的C代码来描述,而不是文字: 这里我想强调的是:请求对象只传递给一个或零个处理程序。 这样做是为了确保其他处理程序不会破坏请求的状态 另一种选择是将代码重构为更面向模式的解决方案。您可能错误地认为处理程序应该能够决定是否可以仅基于requestType字符串处理请求 如果你打算给早期的处理程序一个机会,在考虑后面的处理程序的时候决定如何处理请求,考虑切换到一个更标准的模式。它这样做,而不必假定

下面的解决方案非常类似于“处理程序”的概念,但仍然难以找到相应的模式或(模式的组合)。我们将尝试通过简单的C代码来描述,而不是文字:

这里我想强调的是:请求对象只传递给一个或零个处理程序。 这样做是为了确保其他处理程序不会破坏请求的状态


另一种选择是将代码重构为更面向模式的解决方案。

您可能错误地认为处理程序应该能够决定是否可以仅基于
requestType
字符串处理请求

如果你打算给早期的处理程序一个机会,在考虑后面的处理程序的时候决定如何处理请求,考虑切换到一个更标准的模式。它这样做,而不必假定知道每个处理程序将如何作出决定


如果您确实希望处理决策完全基于
requestType
,那么您应该在初始化期间构建
映射,然后只需查找正确的处理程序,而不是为每个请求遍历一个链。

您可能错误地认为处理程序应该能够根据
requestType
字符串决定是否可以处理请求

如果你打算给早期的处理程序一个机会,在考虑后面的处理程序的时候决定如何处理请求,考虑切换到一个更标准的模式。它这样做,而不必假定知道每个处理程序将如何作出决定


如果您真的希望处理决策完全基于
requestType
,那么您应该在初始化期间构建一个
Map
,然后只查找正确的处理程序,而不是为每个请求遍历一个链。

我觉得我在这里做错了(或者不是很好)。与“责任链”的主要区别在于:1)每个处理者对其他处理者一无所知。2) 由于安全原因,请求对象不应遍历所有处理程序。原始问题背后的想法是:第三方可以提供自己的处理程序实现,他们可以决定是否处理requestType。而且只有在处理程序响应时,才会将一个“true”请求对象传递给该处理程序。我感觉我在这里做得不对(或者不是很好)。与“责任链”的主要区别在于:1)每个处理者对其他处理者一无所知。2) 由于安全原因,请求对象不应遍历所有处理程序。原始问题背后的想法是:第三方可以提供自己的处理程序实现,他们可以决定是否处理requestType。并且只有在处理程序响应并将“true”请求对象传递给该处理程序的情况下。
interface IHandler
{
    bool CanHandle(string requestType);
    void Handle(object request);
}

IHandler[] handlers = new IHandler[] {h1, h2, ...., hN};

void Handle(string requestType, object request)
{
    foreach(var handler in handlers)
    {
        if(handler.CanHandle(requestType)) 
        {
            handler.Handle(request);

            return;
        }
    }
}