zoukankan      html  css  js  c++  java
  • 状态模式(State) 笔记

    让一个对象随着内部的状态改变而发生改变.

    状态的两种切换方式:

    1) 完全交给Context类切换,

    2) 给Context初始化状态,其他的切换根据每一个State类进行切换,Context对象不再介入

    namespace ConsoleApplication21
    {
        class Program
        {
            static void Main(string[] args)
            {
                Context c = new Context();
                c.SetState(new A(c));
                c.Request("吃屎");
                c.Request("C");
                c.Request("B");
                c.Request("我在吃屎");
                Console.ReadLine();
            }
        }
    
    
        public class Context
        {
            private State mState;
    
            public void SetState(State state)
            {
                mState = state;
            }
    
            public void Request(string value)
            {
                mState.Handle(value);
            }
        }
    
        public class State
        {
            protected Context mContext;
    
            public State(Context c)
            {
                mContext = c;
            }
    
            public virtual void Handle(string value)
            {
                Console.WriteLine(value);
            }
        }
    
        public class A : State
        {
            private Context c;
    
            public A(Context c) : base(c) { }
    
            public override void Handle(string value)
            {
                Console.WriteLine("A " + value);
    
                if (value == "C")
                {
                    mContext.SetState(new C(mContext));
                }
            }
        }
        public class B : State
        {
            public B(Context c) : base(c) { }
            public override void Handle(string value)
            {
                Console.WriteLine("B " + value);
                if (value == "A")
                {
                    mContext.SetState(new A(mContext));
                }
            }
        }
        public class C : State
        {
            public C(Context c) : base(c) { }
            public override void Handle(string value)
            {
                Console.WriteLine("C " + value);
                if (value == "B")
                {
                    mContext.SetState(new B(mContext));
                }
            }
        }
    
    }
  • 相关阅读:
    烯烃(olefin) 题解
    二分图的考验 题解
    树上的好题
    [SDOI2013]直径 题解
    [ZJOI2010]数字计数 题解
    神在夏至祭降下了神谕 题解
    洛谷 P4198 楼房重建 题解
    [HAOI2010]软件安装 题解
    [POI2011]ROT-Tree Rotations 题解
    可并堆之左偏树浅谈
  • 原文地址:https://www.cnblogs.com/plateFace/p/6265592.html
Copyright © 2011-2022 走看看