关于代码设计的一点问题(责任链模式)

最近学习了责任链模式,大致知道了责任链模式可以用于处理流程,比如早上起来先穿衣服然后洗漱然后吃饭然后上班。责任链模式可以通过一系列的请求处理者将这个流程串起来,实现请求发送者和请求处理者之间的松耦合,以链式调用的方法对请求对象进行处理。

但是现在有一个场景是实现白名单的维护,其整体的结构大致可以抽象成,数据准备-检验-白名单数据处理。看似是一个链式的调用,符合责任链模式,但是其实和责任链不同,这三个流程一定是都需要的,而非和责任链一样可以自由选择是否处理此请求或者传递请求。其次,这个流程似乎划分的颗粒度比较大,拿检验来说,里面有不少的if/else判断,所以看起来更想是组合模式

根据不同情况获取数据准备a,检验b,白名单处理b组装成一个流程,然后链式调用

或者另一个情况下是数据准备b,检验a,白名单处理c组装成链式调用

刚刚工作不久,碰到这种代码设计问题拿不定主意,这种情况下应该如何设计才合理优雅呢

阅读 1.7k
1 个回答

有一个解决的设想,将责任链更加细化,比如检验方法,把里面的if/else逻辑拆分开,写成检验a 检验b检验c等等,将if/else逻辑放在客户端,组装责任链。优点是简化了请求处理器的功能,而且更加松耦合,缺点是复杂化了客户端,后期维护成本高,进一步的解决方案是利用策略模式组装责任链。

但是现在我更懵逼了,是不是有点小题大做,为了设计模式而设计模式,原来一个类就能处理的代码,可能拆分了十多个类,这合适吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进