一、目的:消除 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");
}
}
}