zoukankan      html  css  js  c++  java
  • 状态机学习

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace StateMachine
    {
        class Program
        {
            static void Main(string[] args)
            {
                var door = new Door(State.Open);
    
                while (true)
                {
                    string s = Console.ReadLine();
                    Operation op = string.IsNullOrEmpty(s) ? Operation.Push : Operation.Pull;
                    door.Process(op);
                }
            }
        }
    
        enum Operation
        {
            Push, Pull
        }
    
        enum State
        {
            Open, Closed
        }
    
        class Door
        {
            public State State { get; set; }
    
            Dictionary<State, Dictionary<Operation, Action>> rule;
            public Door(State state)
            {
                this.State = state;
    
                rule = new Dictionary<State, Dictionary<Operation, Action>>();
                foreach (var e in Enum.GetValues(typeof(State)))
                {
                    rule[(State)e] = new Dictionary<Operation, Action>();
                }
    
                InitOperationRule();
            }
    
            void InitOperationRule()
            {
                //正常操作
                rule[State.Closed][Operation.Push] = () => { Console.WriteLine("门被推开了"); State = State.Open; };
                rule[State.Open][Operation.Pull] = () => { Console.WriteLine("门被拉上了"); State = State.Closed; };
    
                ////加入几种特殊情况的处理
                //rule[State.Closed][Operation.Pull] = () => Console.WriteLine("门是关上的,拉了也白拉");
                //rule[State.Open][Operation.Push] = () => Console.WriteLine("门是开的,不用推了,直接进去吧");
            }
    
            public void Process(Operation op)
            {
                try
                {
                    rule[State][op]();
                }
                catch (KeyNotFoundException)
                {
    
                    Console.WriteLine(string.Format("门在{0}状态下不允许{1}操作", State, op));
                }
                
            }
        }
    }
  • 相关阅读:
    铺地毯
    解方程
    引水入城
    10.16今日暂时停更博客
    聪明的质监员
    CCF NOI plus 201(7)6 初赛题 解题报告
    初赛可能会用到的计算机基础理论知识整理
    火柴排队
    借教室
    10.10今日暂时停更博客
  • 原文地址:https://www.cnblogs.com/EthanSun/p/3156144.html
Copyright © 2011-2022 走看看