2017-10-17 109 views
1

我有一個設計問題,即要求是這樣的:枚舉V5接口設計

  1. 寫生成功能,需要一個參數(「TYPE」)
  2. 根據類型,我需要生成一個字符串並返回它。所以TYPE有效地改變了你生成String的方式。

我兩個設計方案之間的商議:

  1. 使用枚舉:創建具有A型枚舉。然後提供一個生成方法,根據TYPE進行處理並返回一個字符串。
  2. 使用接口:創建一個具有函數generate()的接口。爲每個TYPE創建實現,以實現generate()。

你覺得哪個更好,原因是什麼。

+0

執行以下兩者:創建以產生'()'方法實現的接口的枚舉。那麼你有兩全其美。 – jaco0646

+0

是啊,聽起來不錯。但是enum提供的類實現接口的優勢 –

+0

聽起來有點像你在這裏拋棄了你的作業。你怎麼看? – GhostCat

回答

1

雖然,方法2,遵循開/閉原則OOAD的,即你將增加新的接口實現,每次新的類型,並如它,你不會修改現有的代碼,這是非常安全的方法不需要測試舊的代碼/方法。所以你的代碼將被打開進行擴展,但是被修改關閉。但是,如果您要頻繁添加新的TYPE,則方法#2是有意義的。

IMO,在這種情況下,我會建議使用方法#1,因爲業務需求非常簡單,即基於參數TYPE生成字符串。所以在我看來,使用界面將會過度工程化(如果TYPES不會經常被添加)。

+0

感謝您的建議。 –

1

對於這個問題陳述來說,使用一些設計模式可以使你的代碼更健壯並且可重用。我會向你推薦戰略設計模式。它是使用Interface的基於抽象的模式。

基本實施例:

public interface IMyStrategy 
{ 
    string Generate(string someValue); 
} 

public class StragegyA : IMyStrategy 
{ 
    public string Generate(string somevalue) 
    { 
     return /Implementation/; 
    } 
} 

public class StragegyB : IMyStrategy 
{ 
    public string Generate(string somevalue) 
    { 
     return /Implementation/; 
    } 
} 
public class MyStrategyContext 
{ 
    private readonly IMyStrategy _ImyStrategy; 

    public MyStrategyContextIMyStrategy(IMyStrategy myStragegy) 
    { 
     _ImyStrategy = myStragegy 
    } 

    public string GenerateResult(string someValue) 
    { 
     return _ImyStrategy .Generate(someValue); 
    } 
} 

[Test] 
    public void GenerateValue() 
    { 
    var abc = new MyStrategyContext(new StragegyA()); 
     abc.GenerateResult("hey print"); 
    } 
+0

感謝您的建議 –