我有一個設計問題,即要求是這樣的:枚舉V5接口設計
- 寫生成功能,需要一個參數(「TYPE」)
- 根據類型,我需要生成一個字符串並返回它。所以TYPE有效地改變了你生成String的方式。
我兩個設計方案之間的商議:
- 使用枚舉:創建具有A型枚舉。然後提供一個生成方法,根據TYPE進行處理並返回一個字符串。
- 使用接口:創建一個具有函數generate()的接口。爲每個TYPE創建實現,以實現generate()。
你覺得哪個更好,原因是什麼。
我有一個設計問題,即要求是這樣的:枚舉V5接口設計
我兩個設計方案之間的商議:
你覺得哪個更好,原因是什麼。
雖然,方法2,遵循開/閉原則OOAD的,即你將增加新的接口實現,每次新的類型,並如它,你不會修改現有的代碼,這是非常安全的方法不需要測試舊的代碼/方法。所以你的代碼將被打開進行擴展,但是被修改關閉。但是,如果您要頻繁添加新的TYPE,則方法#2是有意義的。
IMO,在這種情況下,我會建議使用方法#1,因爲業務需求非常簡單,即基於參數TYPE生成字符串。所以在我看來,使用界面將會過度工程化(如果TYPES不會經常被添加)。
感謝您的建議。 –
對於這個問題陳述來說,使用一些設計模式可以使你的代碼更健壯並且可重用。我會向你推薦戰略設計模式。它是使用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");
}
感謝您的建議 –
執行以下兩者:創建以產生'()'方法實現的接口的枚舉。那麼你有兩全其美。 – jaco0646
是啊,聽起來不錯。但是enum提供的類實現接口的優勢 –
聽起來有點像你在這裏拋棄了你的作業。你怎麼看? – GhostCat