状态模式(C#)
状态模式:state。
1.该模式适用于某一事物流程性处理,并且每个流程大致处理相同的情况。
2.基本思路。将每个处理步骤独立出来,形成自己的处理逻辑,处理完成后,指定下一处理步骤。
3.核心思想。设置一个接口和公共类,每个子类实现接口类型,然后将公共类的实例传递给第一个子类,子类实例处理完自己步骤后,将公共实例传递给下一个处理子类(即:公共类中的子类实例发生变化,实例切换),并继续做本子类处理然后传递给下一个子类,直至整个流程处理完毕。
附:具体实例。
public interface Step { /// <summary> /// 踩油门 /// </summary> void StepOn(Car car); } /// <summary> /// 车辆 /// </summary> public class Car { private Step step; public void setState(Step step) { this.step = step; if (this.step == null) { Console.WriteLine("车子停止了"); } else { step.StepOn(this);//传递下一步骤用:car.setState...,如果this为空,则相当于null.setState... } } } public class CarRun : Step { public void StepOn(Car car) { Console.WriteLine("车子启动了,踩油门让车辆跑得更快了"); car.setState(new CarNoOil()); } } public class CarBegin : Step { public void StepOn(Car car) { Console.WriteLine("车子没发动,踩油门无效"); car.setState(new CarRun()); } } public class CarNoOil : Step { public void StepOn(Car car) { Console.WriteLine("车子没油了,踩油门没反应"); car.setState(null); } }
调用代码:
Car state = new Car(); state.setState(new CarBegin());
处理结果:
车子没发动,踩油门无效
车子启动了,踩油门让车辆跑得更快了
车子没油了,踩油门没反应
车子停止了