zoukankan      html  css  js  c++  java
  • 使用Interface和Dictionary

    interface实现polymopherson

    View Code
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using TryCollection.Abstract;
     6 
     7 namespace TryCollection
     8 {
     9     class Engine
    10     {
    11         private IState _state;
    12         public IState State
    13         {
    14             get { return _state; }
    15             set { _state = value; }
    16         }
    17         public void Run(IState initialState)
    18         {
    19             _state = initialState;
    20             while (true)
    21             {
    22                 _state.Render();
    23                 var command = _state.GetCommand();
    24                 command.Execute();
    25             }
    26         }
    27     }
    28 }

    dictionary实现key与value的配对

    View Code
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using TryCollection.Abstract;
     6 using System.Collections;
     7 using TryCollection.States;
     8 using TryCollection.Commands;
     9 using TryCollection;
    10 
    11 namespace TryCollection.States
    12 {
    13     class MainMenuState : IState
    14     {
    15         private Engine _engine;   
    16         private Dictionary<string, IState> _menuDictionary;
    17         private ICommand _continueCommand;
    18         private ICommand _helpCommand;
    19         private IState _continueMenu;
    20         private IState _helpMenu;
    21         public MainMenuState(Engine engine)
    22         {
    23             _engine = engine;
    24             _continueMenu = new ContinueMenu(_engine, this);
    25             _helpMenu = this;
    26 
    27             _menuDictionary = new Dictionary<string, IState> //制作dictionary,使输入与对应的menu匹配
    28             {
    29                 { "con", _continueMenu },
    30                 { "help", _helpMenu } 
    31             };
    32         }
    33 
    34         public void Render()
    35         {
    36             
    37             Console.WriteLine("[con] - Continue");
    38             Console.WriteLine("[Help] - Help\n");
    39         }
    40 
    41         public ICommand GetCommand()
    42         {
    43             var inputString = Console.ReadLine();
    44             //
    45             foreach (var commandMenuPair in _menuDictionary)    
    46             {
    47                 if (commandMenuPair.Key == inputString) //这是Dictionary用的最巧妙的地方,不需要很多if else判断
    48                 {
    49                     _engine.State = commandMenuPair.Value;  
    50                     ICommand command = ConvertCommand(inputString);
    51                     return command;
    52                 }
    53             }
    54                  return new InvalidCommand();
    55         }
    56         ICommand ConvertCommand(string commandString)
    57         {
    58             if (commandString == "con")
    59             {
    60                 return new ContinueCommand();
    61             }
    62             else
    63             {
    64                 return new HelpCommand();
    65             }
    66         }
    67 
    68 
    69     }
    70 }

    Dictionary与IDictionary的区别。IDictionary例子:public IDictionary IMan<IShawn,IChris>, IShawn:IMan   IChris:IMan,他们有同样的Iman方法

  • 相关阅读:
    图像处理之图像分割
    matlab 矩阵运算技巧
    回溯法:八皇后问题
    spring框架学习笔记(二)
    spring框架学习笔记(一)
    java下搭建Webservice服务
    log4j使用
    Mybatis使用
    java序列化与反序列化
    java常用数据类型
  • 原文地址:https://www.cnblogs.com/shawnzxx/p/3066234.html
Copyright © 2011-2022 走看看