状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
主要的解决问题:主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
状态模式的实现:
环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。
抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。
具体状态(Concrete State)角色:实现抽象状态所对应的行为。
使用场景: 1.行为随状态改变而改变的场景。
2.条件、分支语句的代替者。
最简单的状态改变就是时间了,用时间作为判断状态改变的条件,随着时间的变化,改变类不同的行为。
这段时间在学习使用Unity做了一个RPG类型的游戏,在当中就使用到了状态模式。
//主角的状态
public enum PlayerState
{
ControlWalk,
NormalAttack,
SkillAttack,
Death,
NewAttack
}
我将主角的状态设置为正常走动,普攻,技能攻击,死亡和后面加的一个新的状态,作用在自身的技能。不同的主角状态对应不同的行为,不需要写许多的if else的语句来实现对应的功能,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为,代码的扩展性也会更强。
优点:我们采用状态模式,利用多态的特性可以消除掉if else结构。这样所带来的好处就是可以大大的增加程序的可维护性与扩展性。
以上就是个人对于状态模式的理解,欢迎指正。