状态模式和责任链模式对比
首先,我刚学的时候发现这俩模式也太像了吧,感觉不到区别。。。我功力太浅了。
找到了风浪子的转载:https://www.cnblogs.com/xibei666/p/6858145.html
“和状态模式不同的是,责任链模式的责任类不知道自己的下一个需要转移到的职责是哪个,等价于——发出完成某任务请求的客户端并不知道链上的哪一个对象最终处理这个请求,这个组装过程需要交给环境类去完成,所以非常灵活!”
状态模式是让各个状态对象自己知道其下一个处理的对象是谁,即在编译时便设定。
相当于If ,else-if,else-if……, 设计思路是把逻辑判断转移到各个State类的内部实现(相当于If,else If),执行时客户端通过调用环境—Context类的方法来间接执行状态类的行为,客户端不直接和状态交互。
职责链模式中的各个对象并不指定其下一个处理的对象到底是谁,只有在客户端才设定某个类型的链条,请求发出后穿越链条,直到被某个职责类处理或者链条结束。
本质相当于swich-case,设计思路是把各个业务逻辑判断封装到不同职责类,且携带下一个职责的对应引用,但不像状态模式那样需要明确知道这个引用指向谁,而是在环境类设置链接方式或者过程。使用时,向链的第一个子类的执行方法传递参数就可以。客户端去通过环境类调用责任链,全自动运转起来。
瞬间明白了,舒服!!!