状态模式

允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改它的类,能够让程序根据不同的外部状况做出不同的响应,最直接的方法就是在程序中将这些可能发生的外部情况全部考虑到,使用 if else 语句来进行代码响应选择,但是这种方法对于复杂一点的状态判断,就会显得杂乱无章,容易产生错误。而且增加一个新的状态将会带来大量的修改,此时,能够修改自身的状态模式的引入也是个不错的主意

组成角色
状态模式可以有效的替换充满在程序中的 if else 语句:将不同条件下的行为封装在一个类里面,再给这些类一个统一的父类来约束他们
1> 使用环境角色:客户程序是通过它来满足自己的需求,它定义客户程序需要的接口,并且维护一个具体状态角色的实例,这个实例来决定当前的状态
2> 状态角色:定义一个接口以封装与使用环境角色的一个特定状态相关的行为
3> 具体状态角色:实现状态角色定义的接口



特征
抽象状态角色:定义一个接口,用以封装语境对象的一个特定的状态对应的行为
具体状态角色:一个具体状态类,实现语境对象的一个状态对应的行为
语境角色:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例,这个具体状态类的实例给出此环境对象的现有状态

状态模式的有点
1> 封装转换过程,也就是转换规则
2> 枚举可能的状态,需要事先确定状态种类

状态模式的实质
使用状态模式前,客户端外界需要介入改变状态,而状态改变的实现是琐碎复杂的。使用状态模式后,客户端外界可以直接使用事件 Event 实现,根本不必关心该事件导致如何状态变化,这些是由状态机等内部实现。这是一种 Event - condition - State,状态模式封装了 condition - State 部分。每一个状态形成一个子类,每个状态只关心它的下一个可能状态,从而无形中形成了状态转换规则。如果新的状态加入,只涉及它的前一个状态修改和定义

什么时候使用状态模式
State 模式在实际使用中比较多,适合“状态的切换”,因为经常会使用 if ,else if , else 进行状态切换,如果针对状态的这样判断切换反复出现就要联想到是否可以采取State模式

如何使用状态模式
状态模式可以允许客户端改变状态的改变行为,而状态机则是能够自动改变状态,状态机是一个比较独立的而且复杂的机制,具体可以参考一个状态机开源项目:状态模式在工作流或游戏等各种系统中有大量使用,甚至是这些系统的核心功能设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值