状态模式(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());

处理结果:

车子没发动,踩油门无效
车子启动了,踩油门让车辆跑得更快了
车子没油了,踩油门没反应
车子停止了

 

posted @ 2022-03-08 20:39  Shapley  阅读(202)  评论(0编辑  收藏  举报