ToC
假设项目中有这样一个需求:
- orderType 参数的值有三种情况
- === 1 时表示 500 定金
- === 2 时表示 200 定金
- === 3 是表示 无优惠券,原价购买
- pay 表示是否支付定金
- stack 表示还有多少库存
那么根据需求大概可以写出这样的代码:
这么做确实可以完成需求, 但是代码并不好看, 同时层级嵌套也比较深, 用了大量的 if/else. 根据这种场景就引申除了这次的主题: 责任链模式.
责任链模式 : 每个函数只处理一种场景的情况(类似单一职责), 如果不符合条件则转交个下一个方法处理, 这种串联的关系就是责任链模式.
根据责任链原则, 可以得出第一版代码:
但这种方式还是比较麻烦, 需要对每一个方法进行包装, 可以在 Function
的原型上添加额外的方法, 使用链式调用的方式来优化这个问题.
这么做确实解决了问题, 但是日常开发中不应该去给内置构造函数添加方法, 因为这会导致后续接手代码的人很困惑, “为什么这个函数可以直接调用方法, 却没看到定义?”, 所以我们可以自己定义一个构造函数, 然后在原型上添加方法, 最后用实例化后的对象来操作:
以上.