将单例类转换为一种上下文

时间:2010-06-22 23:21:57

标签: c++ qt

我一直在摸不着头脑,思考一下我愚蠢地添加的单身人物的最佳方法。对于背景,此应用程序是股票投资组合跟踪器。我目前有三个课程,我认为这是唯一的实例:

  1. 价格(持有一份清单的类别) 历史价格,股息, 分裂)
  2. 投资组合(管理类     一些投资组合对象的集合     有用的包装函数)
  3. 查询(a     读写的类     数据库)
  4. 为了满足用户请求,我添加了从多个数据库打开和保存的功能。理论上,每个数据库(Queries类)都会被传递到一个Portfolios and Prices'构造函数来加载数据。

    我面临的问题是所有3个类都是相互关联的。如果我打开C:\ database1.sqlite,我应该无法混合和匹配C:\ database2.sqlite中的价格和投资组合。此外,任何编辑都必须保存到适当的数据库。

    我最初的想法是创建一个由这些类组成的上下文对象并传递它。但是,阅读Can you explain the Context design pattern?,我认为这不是正确的解决方案。

    如何删除单例,但仍保持对象之间的完整性?感谢。

1 个答案:

答案 0 :(得分:2)

我会考虑你会从“复数”变为“单身”会有什么变化。如果你的对象是 的东西而不是一些东西,那么推理你的系统会容易得多。

E.g。

class Price;
class Portfolio;
class Query;

如有必要,您可以随时添加:

typedef std::vector<Price> Prices;
typedef std::vector<Portfolio> Portfolios;
typedef std::vector<Query> Queries;

但我的拙见是你应该在这些事情的单个实例之间找出你想要的交互,然后在你有一对多关联时进入你想要的交互(即可以是这些类的一个实例)引用另一个的多个实例?),然后明确定义它们。

基本上,努力使关于交互的推理变得简单。您可能拥有许多价格和投资组合,但要记住在一个实例上运行的操作与在多个实例上运行的操作之间的记忆太难了,因此将这些差异分开并保持事物的实例简单明了。