Design patterns 这是阵列中回退服务的设计模式
让我们假设我看到了一个Design patterns 这是阵列中回退服务的设计模式,design-patterns,composite,chain-of-responsibility,Design Patterns,Composite,Chain Of Responsibility,让我们假设我看到了一个FallbackCompositeService,客户端对象使用它来获得具有回退机制的结果。 它使用方法doSomething()实现了一个FallbackServiceInterface 我们有一个提供服务的DI容器,该容器用一系列具体的回退策略实例化(这里是伪PHP示例): 每个回退服务也实现了fallbackservicecinterface,因此它们也doSomething() 当我们调用$result=$fallbackCompositeService->doSo
FallbackCompositeService
,客户端对象使用它来获得具有回退机制的结果。
它使用方法doSomething()
实现了一个FallbackServiceInterface
我们有一个提供服务的DI容器,该容器用一系列具体的回退策略实例化(这里是伪PHP示例):
每个回退服务也实现了fallbackservicecinterface
,因此它们也doSomething()
当我们调用$result=$fallbackCompositeService->doSomething()
时,服务通过其调用相同方法的子服务循环,第一个非空规则响应“获胜”并返回
问题是:
- 这个实现是复合模式的“退化”版本吗(因此得名)
- 还是责任链的“退化”版本(将
指针简化为通过数组的迭代)nextHandler()
- 或者别的什么/未定义的/两者都有/随便什么。。。?它的潜在缺点是什么
有人指出,模式通常涉及OOP,而您的示例是用回调来表达的。因此,如果您在评论中指出您遵循的是链式模式,那么代码审阅者可能会寻找传统的OOP实现并感到困惑。但是如上所述,您的代码完成了预期的任务,但在没有限定注释的情况下标记为链模式并非100%清晰。这根本不是“设计模式”(从GOF的意义上讲),因为它与OOP设计无关。@Dai。不同意,对我来说,这是一种模式,它依赖于组合、类、接口以特定的、可描述的方式组织起来,并用于特定的目的。如果它是有效的还是无效的,或者如果它是一种更优雅的GoF模式的退化形式,这是有争议的,这正是我所要求的。听起来更像是一种自动的策略模式,不幸的是,必须实际尝试该策略,以确定它是否是您所需要的。@ChiefTwoPencils,如果回退逻辑是您所追求的,这并不不幸。此外,在这种情况下,我们没有注入具体的策略,所以我不太相信。没错,但必要的事情仍然可能是不幸的。而且,没有必要“注入具体的战略”使其成为战略模式;你是怎么理解的?
new FallbackCompositeService([
new Rule1FallbackService(),
new Rule2FallbackService(),
...
])