1. 程式人生 > >字典表+委托替代switch解決思路

字典表+委托替代switch解決思路

方案 del stat log 分支 spa ont blog 這一

參考:http://www.jianshu.com/p/8887b3b3e8ba

代碼

namespace 解決Switch
{
    class Program
    {
        delegate string func();

        static void Main(string[] args)
        {
            var dict = new System.Collections.Generic.Dictionary<string, func>();

            dict["apple"] = new func(apple);
            dict[
"google"] = new func(google); dict["ibm"] = new func(ibm); string cmd; while ("exit" != (cmd = System.Console.ReadLine())) { if (dict.ContainsKey(cmd)) System.Console.WriteLine(dict[cmd]()); } }
static string apple() { return "apple()哈哈哈"; } static string google() { return "google()嘻嘻嘻"; } static string ibm() { return "ibm()呵呵呵"; } } }

------解決方案--------------------
這種思路我覺得很好啊,效率比switch更快。switch相當於依次比較的,而字典表只需要比較一次(查一次hash表)更重要的是容易擴展。
------解決方案--------------------
貌似只有在枚舉上才用switch
switch必須是const,除了枚舉,沒什麽寫死了的
並且枚舉switch的代碼可以自動生成
------解決方案--------------------


這樣是可以的。
但是比switch要慢,比if也慢。但是這種模式比較適合分支擴展和運行時註入分支邏輯。
屬於消息的一種。從效率上來說與switch和if沒法比,這一點可以自行測試。
------解決方案--------------------
...感覺就是visitor

字典表+委托替代switch解決思路