Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 使用什么模式?:处理程序链,其中下一个处理程序需要知道previos处理程序的结果_Design Patterns_Decorator_Chain Of Responsibility - Fatal编程技术网

Design patterns 使用什么模式?:处理程序链,其中下一个处理程序需要知道previos处理程序的结果

Design patterns 使用什么模式?:处理程序链,其中下一个处理程序需要知道previos处理程序的结果,design-patterns,decorator,chain-of-responsibility,Design Patterns,Decorator,Chain Of Responsibility,我正在研究一个解决方案,我已经实现了责任链模式。链中的所有处理程序都独立工作,在某些情况下,基于输入,链被处理程序断开,因为不需要继续处理下一个处理程序。在收到新的更改请求之前,此功能一直有效:( 现在我有一个案例,我需要根据前一个处理程序的结果做出决定。 示例:我们有一个基于FirstName和Last的对象,我们构建了email和notify manager 第一个处理程序:生成电子邮件地址(如果不存在) 第二个处理者:如果电子邮件已经创建(并且不是新的),我们需要通知经理 因此,第二个处理

我正在研究一个解决方案,我已经实现了责任链模式。链中的所有处理程序都独立工作,在某些情况下,基于输入,链被处理程序断开,因为不需要继续处理下一个处理程序。在收到新的更改请求之前,此功能一直有效:(

现在我有一个案例,我需要根据前一个处理程序的结果做出决定。 示例:我们有一个基于FirstName和Last的对象,我们构建了email和notify manager

第一个处理程序:生成电子邮件地址(如果不存在)

第二个处理者:如果电子邮件已经创建(并且不是新的),我们需要通知经理

因此,第二个处理程序取决于第一个处理程序的操作/结果

选择责任链:我是否通过包装输入并添加更多数据并将其用作下一个处理程序的输入来打破模式

选择装潢师:如果我不想让流程走得更远,我是否会通过打破链条来打破模式


或者还有第三种选择吗?

如果我能正确理解你的描述

不适合您的工作,因为链中的每个处理程序都试图处理对象或请求。在处理过程中更改对象会违反此模式

对于你的问题来说,这不是一个合适的设计模式。这是一个结构设计模式,但据我所知,你需要一个行为设计模式

在您的场景中是有意义的。根据您的考试,有一些状态

第一个状态:
建立电子邮件地址

第二种状态:
通知经理

等等

我是否通过包装输入并添加更多数据并将其用作下一个处理程序的输入来打破模式


可能不会。只要您为每个处理程序维护相同的约定,您就可以了。输入可以是可变的,每个处理程序都可以修改它。这没问题。输入也可以具有多态行为,因此您可以使用装饰器对其进行包装以修改该行为,只要装饰器在处理程序之间维护相同的约定。

I我认为这个答案将有助于这里命名的各种模式的一些链接或描述。处理程序的输入是相同的,我所需要做的就是更新输入的状态value@BTownTKD你说得对。这样更好。我添加了一些链接以查看。谢谢。@BurimHajrizaj如果需要更新状态,则更可能的状态模式是最好的一个。当你说“在处理过程中更改对象会违反此模式”时并不清楚。你是指更改接口还是更改对象的状态。更改接口肯定会违反此模式;但更改状态是可以的。