我目前正在为项目开发USB固件。在确定如何最好地处理来自主机的服务请求时,我决定实施一个责任链模式。
在我的应用程序中,从主机检索的每个请求总会有一个处理程序。所以基本上我提前设置了我的处理程序链,循环开始时等待来自主机的请求。请求被传递给" root"处理程序通过检查部分请求来决定是处理它还是将其传递给链。处理完请求后,我们会循环回来等待来自主机的另一个请求。
同样,只有一个处理程序会处理请求。未处理的请求(即遍历整个处理程序链)是一个错误条件。
在阅读www.sourcemaking.com的责任链模式后,引用了我的观点(讨论部分的最后一段):
当每个请求仅由一个处理程序处理时,或者当客户端对象知道哪个服务对象应该处理请求时,不要使用责任链。
为什么这是真的有一个很好的实际理由?在我看来,在作者提出警告的情况下使用责任链是完全有效的。谁能给我一些见解,为什么这将是一个糟糕的设计选择?
答案 0 :(得分:2)
我认为你所引用的警告措辞严厉,可能引起一些混乱。我认为作者想说:
当所有请求只由一个处理程序处理,或者客户端对象知道哪个服务对象应该处理请求时,不要使用责任链。
另一种说法是,责任链模式引入了一些复杂性,如果实际上有多个处理程序,并且客户端对象不容易知道要使用哪个处理程序,则应该只使用该复杂性。如果您知道只有一个处理程序,则不需要链或指针,因为您确切知道要将请求传递给哪个对象。如果您有多个处理程序,但很容易查看请求并告诉使用简单"哪个对象将处理它,如果"语句,然后你再也不需要链或指针。
除此之外:作为在多个平台上实施USB固件的人,我认为您不需要任何正式的责任链。我也认为你甚至不需要指针。您可以使用从USB堆栈到用户代码的简单if语句和硬编码回调,以便将每个传入控件传输指向可以处理它的相应代码。