2010-07-21 35 views
1

我是新來的設計模式,因此對所有可用的知識有限。希望我可以提供一些關於我正在嘗試解決的問題的詳細信息,用戶社區可以就使用哪種設計模式以及如何實施這些模式提供一些指導。相同返回對象但設計模式選項不同枚舉類型值和參數值類型

  1. 返回對象是爲每一個呼叫類型
  2. 底層類的實現可以在某些枚舉類型來完成相同的(即操作類型= 1正常工作與ActionClass1但不ActionClass2和ActionClass3
  3. 類參數而變化基於上型

例如:

public enum ActionType 
{ 
    Action1, 
    Action2, 
    Action3 
} 

P ossible工廠模式實現:

public static class ActionClass 
{ 
     public static int DoAction(ActionType type, int val1, int val2) 
     { 
       switch (type) 
       { 
        case Type1: 
         return new ActionClass1(val1, val2).DoAction(); 
         break; 
        default: 
         throw new NotImplementedException();      
       } 
     } 

     public static int DoAction(ActionType type, string val1) 
     { 
      switch (type) 
       { 

        case Type2: 
         return new ActionClass2(val1).DoAction(); 
         break; 
        case Type3: 
         return new ActionClass3(val1).DoAction(); 
        default: 
         throw new NotImplementedException();      
       } 

     } 
}  

回答

1

取決於你的行動是,你可能想看看Strategy Pattern。否則,Factory Method Pattern看起來已經很不錯了,儘管我可能會改變方法來不立即執行動作,但會返回一個封裝動作的對象,並且在動作不支持動作時使用TryXXX模式而不是異常參數類型:

public static bool TryGetIntIntAction(
    ActionType type, out Func<int, int, int> func) 
{ 
    switch (type) 
    { 
    case ActionType.Action1: 
     func = (val1, val2) => new ActionClass1(val1, val2).DoAction(); 
     return true; 
    default: 
     func = null; 
     return false; 
    } 
} 

public static bool TryGetStringAction(
    ActionType type, out Func<string, int> func) 
{ 
    switch (type) 
    { 
    case ActionType.Action2: 
     func = val1 => new ActionClass2(val1).DoAction(); 
     return true; 
    case ActionType.Action3: 
     func = val1 => new ActionClass3(val1).DoAction(); 
     return true; 
    default: 
     func = null; 
     return false; 
    } 
} 
+0

我喜歡的嘗試方法的想法。開發人員可能需要返回數據。你能解釋一下func =(val1,val2)=>語法是什麼嗎? – 2010-07-21 21:20:39

+0

@Blake Blackwell:這是一個lambda表達式,這是寫一個委託的簡短方式。 'func =((val1,val2)=> ...)'給變量'func'分配一個函數,該函數接受兩個參數('val1'和'val2')並返回'...'。 – dtb 2010-07-21 21:29:43

1

的常用方法重構上類型的開關是多態,通過爲每個ActionType創建類。由於每個DoAction重載採用不同的參數,你可以在「參數對象封裝這些每個動作類型與使用泛型它的參數類型相關聯:

public abstract ActionClass<T> 
{ 
    public abstract int DoAction(T parameter); 
} 

public class ActionClass2 : ActionClass<string> 
{ 
    public override int DoAction(string parameter) { ... } 
} 
相關問題