zoukankan      html  css  js  c++  java
  • 用 State Pattern 来实现一个简单的 状态机

    首先要理解 State Pattern 模式。

    http://www.dofactory.com/net/state-design-pattern

    Definition

    Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
     


    UML class diagram




    Participants

        The classes and objects participating in this pattern are:

      • Context  (Account)
        • defines the interface of interest to clients
        • maintains an instance of a ConcreteState subclass that defines the current state.
      • State  (State)
        • defines an interface for encapsulating the behavior associated with a particular state of the Context.
      • Concrete State  (RedState, SilverState, GoldState)
        • each subclass implements a behavior associated with a state of Context

    先画个状态机用来接收和处理数据。

    开始定义Base状态和各个状态

        public abstract class StateBase
        {
            public abstract void Enter(Monitor context);
    
            public virtual void Exit(Monitor context)
            {
                Console.WriteLine("Exiting current state: {0}", context.CurrentState.StateName); 
            }
    
            public string StateName
            {
                get;
                set;
            }
        }
        public class ConnectState : StateBase
        {
            public ConnectState()
            {
                this.StateName = "Connect"; 
            }
            public override void Enter(Monitor context)
            {
                Console.WriteLine("Enter - {0}", context.CurrentState.StateName);
                context.MoveToNextState(new ReceiveDataState()); 
            }
        }

    Create a context class, and set initial state to start running.

       public class Monitor
        {
            public Monitor()
            {
            }
    
            public void MoveToNextState(StateBase nextState)
            {
                Console.WriteLine("Changing state...");
                this.CurrentState.Exit(this);
                this.CurrentState = nextState;
                this.CurrentState.Enter(this); 
            }
    
            public void Start()
            {
                this.CurrentState = new NotStartState();
                this.CurrentState.Enter(this); 
            }
    
            public StateBase CurrentState
            {
                get;
                set;
            }

    开始使用状态机

            static void Main(string[] args)
            {
                Monitor m = new Monitor();
                m.Start(); 
            }
  • 相关阅读:
    【C语言】23typedef
    C#蓝牙开发之查找设备以及配对
    GridView获取隐藏列的值
    PDA(Windows Mobile)调用远程WebService
    VS2008使用宏记录来实现自动增加注释信息
    CS 系统框架二[部分内容更新]
    GridView里面嵌套RadioButton
    .Net 以报表的形式加载SAP里面的数据
    取GridView的PagerTemplate里面的控件ID
    《深入Ajax架构和最佳实践》读书笔记
  • 原文地址:https://www.cnblogs.com/fdyang/p/7127005.html
Copyright © 2011-2022 走看看