场景:文件具有只读、读写状态,在不同状态时进行的操作不同。
结构
代码
要点:
1、本模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维护State的接口,这样实现了具体操作与状态转换之间的解耦。
2、为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况,因为转换是原子性的——要么彻底转换,要么不转换。
3、如果State对象没有实例变量,那么各个上下文可以共享同一个State对象,从而节省对象开支。