在某些情况下,责任链模式很有用。每个代表都能够确定它是否可以完成任务。所以它只是
if ( ! apple.doItIfYouCan(condition, methodName) ) else ( orange.doItIfYouCan(condition, methodName)
我很少对代表们对责任的扩散感到满意。
所以我通常会寻找类似你的选项2.实际上你正在构建一个调度表。在任何可能的情况下,我都会尝试将条件重新转换为可以在表格中查找的内容。所以实际上我们会获取一些信息并找回一个对象和一个方法
whatToDo = lookup(condition definition) whatToDo[who].what
(对于缺乏语法道歉,我不会说你的语言,我希望这些概念能够翻译 - 我可以用JavaScript,或用C中的函数指针或Java中的反射来完成。)