- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在设计一个 API,它接收全部继承自公共(public)基类的多种事件类型。所以可以说 EventA 和 EventB 继承自 BaseEvent这些事件需要经过几个不同的处理器。所以我认为访客模式在这里是一个不错的选择。所以 BaseEvent 看起来像这样:
public class BaseEvent implements Visitable {
void visit(Visitor visitor) {
visitor.visit(this);
}
}
现在我有一个包含 Visitable 和 Visitor 类型的 API,但它们与 API 并没有真正的关系。处理仅在接收方完成。
因此,我考虑定义不带访问者接口(interface)的 API 类型,并定义包含事件接收者的访问者的新类型但随后我必须将 API 类型转换为新类型,并且我没有找到一种方法,可以在不对每个事件类型使用 instanseof 的情况下实现这一目标
有人看到这个问题的解决方案吗?或者也许其他一些设计可以解决这个问题?
谢谢
编辑(添加更多信息):事件仅保存信息,在接收方,它们需要经过处理器。我目前有 3 种类型的事件(但可能会增加),和 2 个处理器(这也可能改变,但可能性较小)我想使用访问者模式,因为它迫使我在添加新事件时向处理器添加新方法如果我只是重写每种类型的 process() 方法,我只会在添加新事件时捕获运行时错误
最佳答案
我不确定您的用例或架构是什么样的,但我认为我在交易路由系统方面也遇到了类似的问题。定义了一些事件来路由交易、获取确认、获取执行等。事件只是哑对象,并且处理器有大量带有 instanceof
的 if 语句。
我们决定使用“真实”对象而不是事件和处理器来重新设计整个事物。这意味着“事件”不再只是信息的持有者,而是可以“自行处理”。由于它们(至少在我们的用例中)拥有所有必要的信息,因此它们实际上可以比一个或多个“外部”处理器更好地处理自己。
有多种奇怪的副作用:
所以基本上不是像这样的“bean”:
public class LimitOrderExecution ... {
private int executedAmount;
private int remainingAmount;
private BigDecimal executionPrice;
private Order order;
...more fields...
... setter / getter for everything ...
}
我们现在有:
public class LimitOrderExecution ... {
...fields...
public void apply() {
...applies itself using other objects...
}
}
关于java - 如何在不使用instanceof的情况下处理多态事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208987/
对于以下条件: if (a != null && a instanceof A) 或 if (a instanceof A) 首先检查 null 是否有任何优势(例如,性能方面)?两个条件的结果应该相
我正在编写一个方法,如果异常是 *someClass* 的实例,它将返回 true。但是我无法导入其中一个类,因为它在另一个模块中。我无法将该模块添加到项目中,所以我想,我不能使用 instanceo
这个问题在这里已经有了答案: The difference between "instanceof List" and 'o instanceof List" (2 个答案) 关闭 7 年前。 我知
多年来,我尽量避免使用 instanceof。在适用的情况下使用多态性或访问者模式。我想它只是在某些情况下简化了维护......还有其他需要注意的缺点吗? 但是我确实在 Java 库中到处看到它,所以
我没有看到以下任何区别: Object o = new LinkedList(); System.out.println(o instanceof List); System.
我正在像这样扩展对象: Object.prototype.is_a = function (x) { return this instanceof x; } 一切正常 "foo".is_a(Str
我在 NetBeans 中编码如下: public class Grafo { class Par { int a, b; Par(int a, int
我已经动态创建了布局。它有一些编辑文本、 TextView 、微调器等。 之后,我必须获取我介绍的关于这些 View 的信息。 所以我在做这样的事情 for(int i=0;i <= childs;i
等等!我知道还有其他非常相似的问题,但(也许是我)我需要回答其中的特定部分。 我知道可以说 Object.prototype 位于委托(delegate)链的最顶端。但是,在 Function 存在以
MooTools 有自己的instanceOf(instance, Type) 函数。 我只能假设它做了一些与 Javascript 的原生 instanceof 运算符不同的事情,但我似乎无法弄清楚
获取UTXO的方法 getUtoxs(address){ var options; if(Global.btc.network === "testnet"){ options = {
为什么在 JavaScript 中,Object instanceof Function 和 Function instanceof Object 都返回 true? 我在 Safari WebIns
为什么在 JavaScript 中 Object instanceof Function 和 Function instanceof Object 都返回 true? 我在 Safari WebIns
首先,我制作了一个“游戏渲染器”。 我的问题是,当我需要绘制当前元素时:我需要知道它是矩形、圆形还是图像等。 我的类(矩形、圆形...)是从图形扩展而来的。 public class Rectangl
想象一下,我想编写一个名为 isInstanceof 的无用方法,它返回一个 boolean。 我在想。但我不出去。 instanceof 必须像这样使用: [object] instanceof [
我有两个继承自 Player 的类:SimplePlayer 和 InterleavedPlayer。 B 类有这些方法:setPlayer(SimplePlayer player) 和 setPla
我在尝试使用以下内容时遇到了意外行为: $object instanceof $class 1/如 in the official doc. 所述,PHP 'instanceof' 关键字和命名空间可
可以在 angularjs 中使用 typeof 吗? 我有一个 ngrepeat 循环遍历我的数据,应该检查数据是字符串还是对象。 {{angular.isObject(text) &&
例如,我有 Currency 和处理 Currency 各种实现的 Exchange。我想对窗帘货币有额外的汇率,我这样做 interface Currency { double rate();} i
我有以下代码: abstract class BaseToken {} class OpenParen extends BaseToken { public static assert(t:
我是一名优秀的程序员,十分优秀!