解决方法: 使用映射关系,将条件表达式和处理函数一一对应并进行注册。使用时根据条件表达式,找到对应的处理函数进行处理。
适用场景:条件表达模式固定的 if else。
解决方法:使用链表将功能组件串联起来,同时将条件判断权交给每个功能组件,形成完整的功能。
适用场景:条件表达式灵活多变,没有统一的形式。
职责链模式通常有外部控制和内部控制两种控制模式:
解决方法:使用观察者模式,关联不同的事件类型和对应的处理机制。
适用场景:表驱动方式的补充。
与表驱动的不同:
解决方法:可以看做是表驱动的一种,当前状态和事件两者组合与处理函数的一种对应关系。处理成功之后还会有一个状态转移处理。
适用场景:存在状态和状态流转的场景,如协议栈、订单处理等功能中。
解决方法:引入响应的 Null 子类,实现相应的函数,屏蔽 Null 对象的影响
适用场景:移除大量的判空操作
可以使用 C++17 中的 std::optional<T>
来替代 if-else