就像订阅淘宝团购通知一样,当客户订阅了开团通知,团购发布者会把这个客户添加到订阅者列表里,一旦团购状态发生改变了,所有订阅了开团通知的客户都会自动收到开团通知
就像小时候老师会在黑板上写题目,同学们需要把题目抄下来再开始解题,在这个抄的过程中很容易把体抄错或者抄漏。从代码思想考虑,这样的做法其实会有很多处重复代码。如果将老师出的题目作为一个模板,其他同学只需要继承这个模板再输出相对应的答案会简单方便许多。
以餐厅经营为例,服务员作为Invoker,可以接受删除修改和给厨师传递来自客人的命令(command),厨师作为receiver会来执行这些命令,但是只会在服务员通知他的情况下才会执行命令。
为了能根据当前状态选择完成相应行为的方法, 绝大部分方法中会包含复杂的条件语句。 修改其转换逻辑可能会涉及到修改所有方法中的状态条件语句, 导致代码的维护工作非常艰难。状态模式解决了当控制一个对象转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到了表示不同状态的一系列类当中。
写代码是context,工作状态是state,上午工作状态、下午工作状态等具体的状态是concrete state。会写代码(context)的状态会根据写代码(context)中的时间属性来找到要call的方法是哪个状态类的。,判断逻辑都在具体状态里,这样工作类就没有过长的分支判断句了。
在公司想申请加薪,员工向经理申请,经理向总经理申请,总经理向总监申请,最后总会提交到所对应的人,这种情况员工(客户端)就不需要知道到底是谁处理加薪,只需要跟上级领导申请就可以了。每个具体的handler可以设supervisor,不能处理的请求就会自动转到supervisor处理
Reference
原文:https://www.cnblogs.com/cancantrbl/p/14774531.html