【发布时间】:2011-08-21 00:20:56
【问题描述】:
这是我在金融行业的问题领域:
资产 ========== 资产母公司 资产ID + compareTo(资产另一个资产) 投资组合:资产 ----------------- 姓名 风险限额 上市股票 + compareTo(资产另一个资产) + Composite.CompareTo(投资组合,CompareRules)。 股票:资产 -------- 市场 数量 公司 + compareTo(资产另一个资产) 另一种股票:股票 -------------------- 一些其他的财产 + compareTo(资产另一个资产)我已将复合模式应用于 *Portfolio*s 中的 *Stock*s 结构。我想有一种干净的方式来自定义这个复合的 compareTo 方法。也就是说,AnotherStock 将始终与另一个 AnotherStock、Stocks 与 Stocks 进行比较。在我看来,这就像策略模式。
我想做如下的事情(伪代码)
差异=composite.CompareTo(anotherComposite,CompareRules)。 Composite.CompareTo 将类似于: 比较规则.比较(this.Stocks[currentAssetID],otherComposite[currentAssetID])ComparisonRules.Compare(Asset a, Asset b) 会做一些丑陋的事情:
if(a is Stock and b is Stock) : 转换为股票并进行基于股票的比较 else if (a is AnotherStock and b is AnotherSTock): 转换为 AnotherStock有没有一种方法可以编写ComparisonRules,这样我就不必向下转换但仍然提供自定义的ComparisonRules 对象?
【问题讨论】:
-
您的问题并不完全清楚;
composite.CompareTo是什么?假设您在问题开始时提供了一个类图(排序),composite.CompareTo的命名是无效的。同样“自定义此组合的compareTo方法”也不完全清楚;您的意思是您希望能够提供一个规则列表,并且每个规则必须处理AnotherStock、Stock等? -
>您的意思是您希望能够提供规则列表,并且每个规则必须处理AnotherStock、Stock、:是的
-
比较规则是否适用于两只股票(即比较一只股票与另一只股票)或两个股票列表(将一个列表与另一个比较)?
标签: c# oop design-patterns