需要策略模式帮助

发布于 2024-10-09 19:36:00 字数 738 浏览 8 评论 0原文

存在接口算法

存在类MathAlgorythm实现算法 (返回MathResult,它实现Result

存在类ChemitryAlgorythm实现算法 code> (返回 ChemitryResult,它实现 Result

此外,还存在一个 Context 类,用于将数据传递给这些 Algo。数据的传递方式如下:

public Result executeStrategy(Data data) {
    return algo.execute(data);
}

假设我,executeStrategy并返回 return MathAlgorithm.execute(data); 我得到了 Result 类型的内容,对吗?

然后我执行 return ChemitryAlgorithm.execute(data); 我再次得到一些结果

问题: 结果是一个界面。我需要访问作为 MathResult 或 ChemistryResult 的具体类实现。换句话说。一旦我得到 Result 类型的东西,我需要更深入地挖掘并知道接口后面隐藏了什么类,

我希望这个漫无目的的内容不会太令人困惑。

感谢您的阅读和回复

There exists interface Algorithm

There exists class MathAlgorythm implements Algorithm (returns MathResult, which implements Result)

There exists class ChemitryAlgorythm implements Algorithm (returns ChemitryResult, which implements Result)

Additionally, there exists a Context class, which is used to pass data to these Algos. Data is passed in the following manner:

public Result executeStrategy(Data data) {
    return algo.execute(data);
}

Suppose I, executeStrategy and get back
return MathAlgorithm.execute(data); I get something of type Result right?

I then execute
return ChemitryAlgorithm.execute(data); Again i get something Result

Question:
Result is an interface. I need to gain access to concrete class implementation as MathResult or ChemistryResult. In other words. Once i get something of type Result, i need to dig deeper and know what class hides behind the interface

I hope this rambling is not too confusing.

Thank you for reading and responding

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

別甾虛僞 2024-10-16 19:36:00

如果你给 Result 一个像 T get() 这样具体实现必须实现的方法,那么你不需要了解具体实现。

If you give Result a method like T get() which the concrete implementations have to implement, then you don't need to know about the concrete implementations.

暖伴 2024-10-16 19:36:00

不确定我是否理解你的问题,但要知道实例的具体类,你可以使用 getClass() 或使用 instanceof 来检查它是否是 MathResult 等。请小心,不要破坏实现 Result 接口的全部要点。

Not sure if I understood your question but to know the concrete class of an instance you can use getClass() or alternatively use instanceof to check if it is MathResult etc. Be careful that you dont defeat the whole point of implementing the Result interface.

ㄖ落Θ余辉 2024-10-16 19:36:00

确保您的结果界面足够强大,足以满足所有客户。这是不破坏多态透明度的关键。

如果你真的,真的真的需要知道具体类型,你可以使用 getClass,某种唯一的 ID 和 getter,或者(最好)吸收行为转化为具体 Result 类的操作。

Make sure your Result interface is strong enough to satisfy all clients. That's the key so that you don't break polymorphic transparency.

If you really, really, REALLY need to know the concrete type, you can either use getClass, some sort of unique ID and a getter, or (most preferably) absorb the behavior into an operation of a concrete Result class.

空宴 2024-10-16 19:36:00

怎么样:

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);

How about:

interface Algorithm<R extends Result, D extends Data> {
  T execute data(D data);
}

and then your MathAlgorithm implementation would look like this:

class MathAlgorithm implements Algorithm<MathResult, MathData> {
  public MathResult execute(MathData data) {
    // do whatever
    return <instance of MathResult>;
  }
}

the usage:

MathResult mathResult = new MathAlgorithm().execute(someMathData);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文