gpt4 book ai didi

C#、容器类设计模式?

转载 作者:行者123 更新时间:2023-12-02 19:37:09 25 4
gpt4 key购买 nike

我深入研究了 C#,但遇到了一个我似乎无法解决的问题:

我设计了一个财务回测和交易引擎,作为其中的一部分,我喜欢实现一个“策略容器”。这个策略容器应该有两个目的。 (1) 保存执行数学计算的不同策略的实例,以及 (2) 提供访问器,以便将新的报价数据传递到策略实例中并从策略实例接收某些返回的信息。

我上面提到的不同策略应该是唯一的类,但是它们是从基类派生的。我想在这些策略中执行完全不同的操作,因此我认为将它们设计为从一个基类派生的单独的类是可行的。一个复杂之处是我需要策略容器中包含的每个策略类的多个实例。每个策略类还包含一个股票代码列表,每个代码都应该获取其策略实例。

策略容器的另一个重要点是它可以创建、实例化以及稍后调用每个策略实例。

我想问你们中的一些人对我如何设计和实现这个有什么想法:

  • 总体上最好的设计模式是什么?
  • 正如所描述的,如果我为每个策略创建不同的类,那么我显然也会得到不同的类型,我如何将所有这些都保存在策略容器内的一个容器/集合中?
  • 我如何通过反射或其他方式创建、实例化和调用每个策略实例的方法,而不知道最终会得到多少个策略实例。我确实知道策略的名称和类型,也知道股票代码的名称。
  • 我只想提供我想要连接的策略(我提供策略名称 = 类名称?),并为每个策略提供一个股票代码列表。策略容器将为列表所提供的策略类型的每个策略中的每个交易品种创建实例,并随后调用“RunStrategy(Quote quote)”方法,该方法将新的报价输入到每个实例中,以便可以执行计算。
  • 一个目标是保持每个策略类的接口(interface)尽可能干净,大多数标准(重复)功能都在派生基类中实现。

我不要求完整的源代码,而是要求您认为我应该如何设计这个东西以及如何完成上述每一点的想法。这是我自己的东西,不会变成任何商业产品。我非常擅长编写实现数学点点滴滴的代码,但我不太熟悉设计模式和系统架构。

编辑: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()
{

}
}

最佳答案

您确实应该考虑使用此类系统的接口(interface)。该接口(interface)是您与策略的契约,您可以为该接口(interface)提供任意数量的不同实现。然后,您的容器将包含接口(interface)。

类似于:

public interface IStrategy
{
void RunStrategy(Quote quote);
}

那么你的实现将是这样的:

public class StrategyOne : IStrategy
{
void RunStrategy(Quote quote)
{
}
}

容器可以是:

List<IStrategy> container = new List<IStrategy>();

关于C#、容器类设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7968911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com