我目前正在为一个项目的USB固件工作。在研究如何最好地处理来自主机的服务请求时,我决定实现一个责任链模式。
在我的应用程序中,对于从主机检索的每个请求,总会有一个处理程序。因此,基本上,我提前设置了处理程序链,循环从等待主机的请求开始。请求被传递给"root“处理程序,该处理程序通过检查请求的一部分来决定是处理它还是从链中传递它。一旦处理了请求,我们就循环回等待来自主机的另一个请求。
同样,只有一个处理程序将处理请求。未处理的请求(即遍历整个处理程序链)是一个错误条件。
在阅读了www.sourcemaking.com的责任链模式之后,这句话引起了我的注意(讨论部分的最后一段):
当每个请求只由一个处理程序处理时,或者当客户端对象知道哪个服务对象应该处理请求时,不要使用责任链。
是否有很好的实际理由来解释这是真的?在我看来,在本案中使用责任链,作者警告说,这是完全正确的。有人能给我一些洞察为什么这将是一个糟糕的设计选择吗?
发布于 2017-01-24 21:38:31
我认为你所引用的警告措辞很糟糕,可能会引起一些混乱。我认为作者的意思是:
当所有请求只由一个处理程序处理,或者当客户端对象知道哪个服务对象应该处理请求时,不要使用责任链。
另一种说法是,责任链模式引入了一些复杂性,只有在实际有多个处理程序,并且客户端对象不容易知道要使用哪个处理程序时,才应该使用这种复杂性。如果您知道只有一个处理程序,则不需要链或指针,因为您确切知道要将请求传递给哪个对象。如果您有多个处理程序,但是很容易查看请求并判断哪个对象将使用简单的" If“语句来处理它,那么您同样不需要一个链子或指针。
旁白:作为一个已经在多个平台上实现了USB固件的人,我认为你不需要任何像责任链这样正式的东西。我也觉得你根本不需要指点。您可以使用简单的if语句和从USB堆栈到用户代码的硬编码回调,以便将每个传入的控件传输到能够处理它的适当代码。
https://stackoverflow.com/questions/41837876
复制相似问题