您的位置:首页 > 其它

设计模式学习--状态模式

2016-05-17 23:29 211 查看
状态模式: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

状态模式中的行为时有状态来觉得的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但是他们的目的和本质却完全不一样,状态模式的行为是平行的,不可替代的,策略模式的行为是彼此独立,可相互替换的. 状态模式吧对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类,状态模式的意图是让一个对象在其内部状态改变的时候,其行为也发生改变.

使用场景:

一个对象的行为却觉于他的状态,并且它必须在运行时根据状态改变它的行为

代码中包含大量与对象状态有关的条件语句,一个操作中含有庞大的多分支语句,且这些分支依赖于对象的状态.状态模式将每一个条件分支放入一个独立的类中,这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一个对象可以不依赖于其他对象而独立变化,这样通过多态来去除过对的,重复的if_else等分支语句

状态模式将行为封装到状态类中,在进行操作时将这些功能转发给状态对象,不同的状态有不同的实现,这样就通过多态的形式去除了重复.杂乱的判断语句,这也正是状态模式的精髓.

状态模式的关键点在于不同的状态下对于同一行为有不同的响应,这其实就是一个将if-else用多态来实现的一个具体示例.在if-else或switch-case形式下根据不同的状态进行判断,如果是状态A那么执行A方法,如果是状态B 就执行B方法,但这种实现使得逻辑耦合在一起,易于出错,通过状态模式能够很好的消除这类"丑陋"的逻辑处理,当然并不是任何出现if-else的地方都应该通过状态模式重构,模式的运用一定要考虑所处的情景以及你要解决的问题.

状态模式将所有与一个特点的状态相关的行为都放入一个状态对象中,它提供了一个更好的方法来组织与特定状态相关的代码,将繁琐的状态判断转换成结构清晰的状态类,在避免代码膨胀的同时也保证了可扩展性与可维护性.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: