定义:当一个对象的内在状态改变时允许改变其他行为,这个对象看起来像是改变了其类
状态模式主要解决的是当控制一个对象 状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的 一系列类当中.可以把复杂的判断逻辑简化.
那么问题来了,这个模式在什么时候可以被使用呢?
从定义中我们可以得出,如果一个类的状态是根据某个值的改变而改变,并且必须在运行时刻根据状态去改变它的行为的时候.
下面我们来看一个例子,
假如说:有一辆高科技汽车,他会根据不同的车速来提醒对应的提示语
abstract class State { public abstract void Handle(Car c); } class LowerBlast:State { public override void Handle(Car c) { if (c.Blast<50) { Console.WriteLine("车现在的速度还是很慢,很安全的,请放心驾驶"); return; } c.SetState(new Moidding()); c.SayTitle(); } } class Moidding:State { public override void Handle(Car c) { if (c.Blast<100) { Console.WriteLine("现在的速度还是有点看头的"); return; } c.SetState(new Flast()); c.SayTitle(); } } class Flast:State { public override void Handle(Car c) { Console.WriteLine("现在的车速为:{0},请您注意生命安全!!!",c.Blast); } } class Car { private State state = new LowerBlast(); private int blast = 0;//速度 public int Blast { get; set; } public void SetState(State c) { this.state = c; } public void SayTitle() { state.Handle(this); } }
调用代码如下:
static void Main(string[] args) { Car c = new Car(); c.Blast = 120; c.SayTitle(); Console.Read(); }
从上面这个例子我们就可以看出,要实现这个状态模式并不难,最重要的就是通过"状态"来对一个类的行为进行改变,然后向上传递