我鑽研C#而是跨越,我似乎無法解決的問題來了:C#,容器類的設計模式?
我設計了一個金融後臺測試和交易引擎和的那部分我想實現一個「策略容器」。這個策略容器應該有兩個目的。 (1)持有執行數學計算的不同策略的實例,並且(2)提供訪問器以便將新的刻度數據傳遞到策略實例中並接收來自策略實例的特定信息。
我上面提到的不同策略應該是獨特的類,然而,它們是從基類派生的。我想在這些策略中執行完全不同的操作,因此我認爲將它們設計爲獨立的類可以從一個基類派生出來。一個複雜因素是我需要包含在策略容器中的每個策略類的多個實例。每個戰略類別還包含一個股票代碼列表,每個代碼應該在戰略實例上獲得。
Strategy容器的另一個重要點是它可以創建,實例化以後也可以調用每個策略實例。
我要問一些你,你有什麼樣的想法如何,我能去設計和實施這樣的:
- 什麼是最佳的整體設計模式?
- 如所描述的,如果我爲每個策略創建不同的類,那麼我顯然最終會得到不同的類型,我如何將所有這些保存在Strategy Container中的一個容器/集合中?
- 我該如何通過反射或其他方式創建,實例化和調用每個單一策略實例的方法,而無需知道我最終會得到多少個。我知道策略的名稱和類型,我知道股票代碼的名稱。
- 我只是想提供哪些策略,我想掛鉤(我提供策略名稱=類名?),併爲每個策略的股票符號列表。 Strategy Container將爲列表所提供的策略類型的每個策略中的每個符號創建實例,並隨後調用「RunStrategy(Quote quote)」方法,將新引號提供給每個實例以便可以執行計算。
- 一個目標是保持每個策略類的接口儘可能的乾淨,大多數標準(重複)功能都是在衍生自基類中實現的。
我不要求完整的源代碼,但想法你認爲我應該如何設計這個東西,以及我如何能夠完成上述每一點。這是我自己的東西,不會變成任何商業產品。我非常適合編寫實現數學零碎的代碼,但我對設計模式和系統架構不太熟悉。
編輯: Graymatter,我玩了一下,似乎你提供了我正在尋找的東西。非常感謝。
class Program
{
static void Main(string[] args)
{
List<IStrategy> container = new List<IStrategy>();
container.Add(new StrategyOne());
container[0].AddValue(50);
Console.ReadLine();
}
}
public interface IStrategy
{
void AddValue(int value);
}
public class StrategyOne : StrategyBase
{
public override void Calculates()
{
Console.WriteLine("This is my value: " + myValue);
}
}
public class StrategyBase : IStrategy
{
protected int myValue;
public void AddValue(int value)
{
Console.WriteLine("Run Strategy in Base");
myValue = value;
Calculates();
}
public virtual void Calculates()
{
}
}
讓我玩一點這些想法,我試驗後報告,感謝您的意見,真的很重視! –
你可以通過upvoting的答案向你展示他的評論。我代表你做了。 – Jason
似乎我還不能投票,剛剛加入今天...對不起 –