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));
                }
                
            }
        }
    }
  • 相关阅读:
    $.unique()去重问题
    js判断中文
    js URL中文传参乱码
    zabbix添加nginx监控
    TCP/IP与OSI参考模型原理
    100个linux系统常用指令
    read指令使用方法
    grep与正则表达式使用
    shell脚本中case的用法
    shell脚本:变量,文件判断,逻辑运算等纪要
  • 原文地址:https://www.cnblogs.com/EthanSun/p/3156144.html
Copyright © 2011-2022 走看看