消除程序中的 if else(一)

  一、目的:消除 if else 使程序优雅。

  二、方法:将参数与对应的操作方法放入集合中统一处理。

  三、点评:这种方式消除了if else,但其实只是起了整理代码的作用。在参数新增时,仍然需要修改处理类(因为处理方法还在处理类中)。要想达到真正的扩展目的,请看  消除程序中的 if else(二)

  四、演示:

using System;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 消除 if else 使程序优雅
/// </summary>
namespace ClearIfElse.Way1.Old
{
    public class Executor
    {
        public void Execute(string parm)
        {
            if (parm == "A")
            {
                DoSthA();
            }
            else if (parm == "B")
            {
                DoSthB();
            }
            else if (parm == "C")
            {
                DoSthC();
            }
        }

        private void DoSthA() { Debug.Log("做A事"); }
        private void DoSthB() { Debug.Log("做B事"); }
        private void DoSthC() { Debug.Log("做C事"); }
    }

    public class Client
    {
        static public void Main()
        {
            Executor executor = new Executor();
            executor.Execute("A");
            executor.Execute("B");
            executor.Execute("C");
        }
    }
}

namespace ClearIfElse.Way1.New
{
    public class Executor
    {
        //创建集合收录参数和操作
        public Dictionary<string, Action> operateDict;
        public Executor()
        {
            operateDict = new Dictionary<string, Action>();
            operateDict.Add("A", DoSthA);
            operateDict.Add("B", DoSthB);
            operateDict.Add("C", DoSthC);
        }

        public void Execute(string parm)
        {
            operateDict[parm]();
        }

        private void DoSthA() { Debug.Log("做A事"); }
        private void DoSthB() { Debug.Log("做B事"); }
        private void DoSthC() { Debug.Log("做C事"); }
    }

    public class Client
    {
        static public void Main()
        {
            Executor executor = new Executor();
            executor.Execute("A");
            executor.Execute("B");
            executor.Execute("C");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/NRatel/article/details/85328530