利用Action方法委托重构switch接口

 1 using System;
 2 using System.Collections.Generic;
 3 
 4 namespace ConsoleApplication1
 5 {
 6     internal class Program
 7     {
 8         private static void Main(string[] args)
 9         {
10             while (true)
11             {
12                 var s = Console.ReadLine();
13                 int i;
14                 int.TryParse(s,out i);
15 
16                 //swtich分支处理
17                 switch (i)
18                 {
19                     case 1:
20                         MethodHelper.A();
21                         break;
22                     case 2:
23                         MethodHelper.B();
24                         break;
25                     case 3:
26                         MethodHelper.C();
27                         break;
28                 }
29 
30                 //委托处理
31                 ActionDic.GetInstance().DoAction(i);
32             }
33         }
34     }
35 
36     public class MethodHelper
37     {
38         public static void A()
39         {
40             Console.WriteLine("A");
41         }
42         public static void B()
43         {
44             Console.WriteLine("B");
45         }
46         public static void C()
47         {
48             Console.WriteLine("C");
49         }
50     }
51 
52     public sealed class ActionDic
53     {
54         private static readonly ActionDic instance = new ActionDic();
55 
56         private ActionDic()
57         {
58             actList = new Dictionary<int, Action>
59                           {
60                               {1, MethodHelper.A},
61                               {2, MethodHelper.B},
62                               {3, MethodHelper.C},
63                           };
64         }
65         public static ActionDic GetInstance()
66         {
67             return instance;
68         }
69         private readonly Dictionary<int, Action> actList;
70       
71         public void DoAction(int act)
72         {
73             Action ar;
74             if (actList.TryGetValue(act, out ar))
75             {
76                 ar.Invoke();
77             }
78         }
79     }
80 }

 

posted @ 2013-06-07 15:24  魂斗罗II  阅读(373)  评论(0编辑  收藏  举报