Mat*_*olf 2 c# reflection containers class base
我钻研了C#,但遇到了一个我似乎无法解决的问题:
我设计了一个财务回溯测试和交易引擎,作为其中的一部分,我想实现一个"策略容器".此策略容器应有两个用途.(1)保存执行数学计算的不同策略的实例,以及(2)提供访问器以便将新的tick数据传递到策略实例并从策略实例接收某些信息.
我上面提到的不同策略应该是唯一的类,但是它们来自基类.我想在这些策略中执行完全不同的操作,因此我认为将它们设计为从一个基类派生的单独类是可行的.一个复杂因素是我需要策略容器中包含的每个策略类的多个实例.每个策略类还包含一个股票代码列表,每个符号应该在策略实例上获得.
Strategy容器的另一个重点是它可以创建,实例化,然后还可以调用每个策略实例.
我想问一下你们有什么样的想法我可以如何设计和实现这个:
我不是要求完整的源代码,而是为了想法你认为我应该如何设计这个东西,以及我如何能够完成上述每一点.这对我自己来说并不会变成任何商业产品.我很乐意编写实现数学比特的代码,但我对设计模式和系统架构不太熟悉.
编辑: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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
您应该真正考虑使用此类系统的接口.界面是您与策略的契约,您可以为界面提供任意数量的不同实现.然后,您的容器将包含接口.
就像是:
public interface IStrategy
{
void RunStrategy(Quote quote);
}
Run Code Online (Sandbox Code Playgroud)
然后你的实现将是这样的:
public class StrategyOne : IStrategy
{
void RunStrategy(Quote quote)
{
}
}
Run Code Online (Sandbox Code Playgroud)
容器可以是:
List<IStrategy> container = new List<IStrategy>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10646 次 |
最近记录: |