这里的策略里面向下转换是我的问题域,在金融业:想要避免传递到复合
Asset ========== Asset parent assetID + compareTo(Asset anotherAsset) Portfolio : Asset ----------------- name risk limit List stocks + compareTo(Asset anotherAsset) + composite.CompareTo(Portfolio, ComparisonRules). Stock : Asset ------- market amount company + compareTo(Asset anotherAsset) AnotherStock : Stock -------------------- someOtherProperty + compareTo(Asset anotherAsset)
我已经应用了复合模式* 组合内结构* 股票 * S * S。我想要一个自定义此复合的compareTo方法的干净方式。也就是说,AnotherStock将永远与另一个AnotherStock,股票与股票进行比较。这看起来像我的战略模式。
我想这样做以下(伪代码)
differences = composite.CompareTo(anotherComposite, ComparisonRules). composite.CompareTo would be something like : ComparisonRules.Compare(this.Stocks[currentAssetID], otherComposite[currentAssetID])
ComparisonRules.Compare(资产A,资产B)会做这样的事情丑陋:
if(a is Stock and b is Stock) : convert to stock and do stock-based comparison else if (a is AnotherStock and b is AnotherSTock): convert to AnotherStock
是否有以这种方式编写ComparisonRules的方法,我不需要downcast,但仍然提供自定义的ComparisonRules对象?
你的问题并不完全清楚;什么是'composite.CompareTo'?假设你在问题开始时提供了一个类图(类),命名'composite“。CompareTo'无效。另外“定制这个组合的'compareTo'方法并不完全清楚;你的意思是你希望能够提供一个规则列表,并且每条规则都必须处理'AnotherStock','Stock'等。 –
>你的意思是你希望能够提供一个规则列表,并且每条规则必须处理另一个股票,股票,是: –
比较规则是否对两只股票进行操作(即比较一只股票与另一只股票)还是对两个股票清单(比较一个清单到另一个清单)? –