C# 设计模式(21)状态模式

状态模式

代码实现:

交通类:

namespace StatePattern
{
    public abstract class BaseLight
    {
        private LightColor _lightColor;

        public abstract void Show();
        public abstract void TurnContext(Context context);
    }
    public enum LightColor
    {
        Green,
        Yellow,
        Red
    }
    public class LightGreen:BaseLight
    {
        public override void Show()
        {
            Console.WriteLine("CurrentLight color is green,you can go.");
        }

        public override void TurnContext(Context context)
        {
            context.CurrentLight = new LightYellow();
        }
    }
    public class LightYellow : BaseLight
    {
        public override void Show()
        {
            Console.WriteLine("CurrentLight color is Yellow,you can be careful.");
        }

        public override void TurnContext(Context context)
        {
            context.CurrentLight = new LightRed();
        }
    }
    public class LightRed:BaseLight
    {
        public override void Show()
        {
            Console.WriteLine("CurrentLight color is Red,you must stop.");
        }

        public override void TurnContext(Context context)
        {
            context.CurrentLight = new LightGreen();
        }
    }
}

上下文:

    public class Context
    {
        public BaseLight CurrentLight { get; set; }

        public void Show()
        {
            this.CurrentLight.Show();
        }

        public void Turn()
        {
            this.CurrentLight.TurnContext(this);
        }
    }

代码调用:

    class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            context.CurrentLight = new LightGreen();
            context.Show();
            context.Turn();            
            context.Show();
            context.Turn();           
            context.Show();
            context.Turn();
            context.Show();
            context.Turn();
        }
    }

结果:

 

posted @ 2020-12-08 14:45  NiKaFace  阅读(182)  评论(0编辑  收藏  举报