存在interface Algorithm
存在class MathAlgorythm implements Algorithm
(returns MathResult, which implements Result
)
存在class ChemitryAlgorythm implements Algorithm
(returns ChemitryResult, which implements Result
)
此外,还有一个Context class
,用于将数据传递给这些Algos。数据以下列方式传递:
public Result executeStrategy(Data data) {
return algo.execute(data);
}
假设我,executeStrategy然后回来
return MathAlgorithm.execute(data);
我得到类型的结果吗?
return ChemitryAlgorithm.execute(data);
我又得到了一些结果
问题: 结果是一个界面。我需要以MathResult或ChemistryResult的形式获得对具体类实现的访问权限。换一种说法。一旦我得到类型结果的东西,我需要深入挖掘并知道隐藏在界面背后的类
我希望这种散漫不会太混乱。
感谢您阅读和回复
答案 0 :(得分:2)
如果你给Result
一个类似T get()
的方法,具体的实现必须实现,那么你不需要知道具体的实现。
答案 1 :(得分:0)
不确定我是否理解了你的问题但是要知道你可以使用getClass()的实例的具体类,或者使用instanceof来检查它是否是MathResult等。小心你不要打败实现结果的全部要点接口
答案 2 :(得分:0)
确保您的Result界面足够强大以满足所有客户端。这是关键,这样你就不会打破多态透明度。
如果您真的,真的,真的需要知道具体类型,您可以使用getClass,某种唯一ID和吸气剂,或者(最好的) )将行为吸收到具体Result类的操作中。
答案 3 :(得分:0)
怎么样:
interface Algorithm<R extends Result, D extends Data> {
T execute data(D data);
}
然后您的MathAlgorithm实现将如下所示:
class MathAlgorithm implements Algorithm<MathResult, MathData> {
public MathResult execute(MathData data) {
// do whatever
return <instance of MathResult>;
}
}
用法:
MathResult mathResult = new MathAlgorithm().execute(someMathData);