java - 如何为抽象类或接口的子类型实现访问者模式?
问题描述
我有这个特定的问题,我无法用其他问题解决。我正在尝试为游戏实现一个访问者,访问者是一个Attack
类,它必须在矩阵中搜索可能包含的单元格Characters
,然后如果角色是敌人而不是朋友,则损坏它。
我遇到的问题是不使用 anInstanceOf
来访问角色,因为它违反了开闭原则。这是我的代码:
访客界面
public interface Visitor {
public void visit(GroundCell c);
public void visit(MountainCell c);
public void visit(BuildingCell c);
public void visit(WaterCell c);
public void visit(Foe f);
public void visit(Friend f);}
攻击抽象类
public abstract class Attack implements Visitor {
}
攻击具体类
public class TankAttack extends Attack{
...
@Override
public void visit(GroundCell c) {
//here, i'd like to call c.getCharacter.accept(this)
}
但是我得到一个错误,说我应该首先实现 Visit(Character c),而我只需要它的子类。
我应该在 TankAttack 类中做些什么来访问 Character 的 Friend 或 Foe 子类而不破坏使用 InstanceOf 的设计?
编辑澄清:朋友和敌人是角色的子类。
解决方案
几个小时后我解决了。这个问题不是由访问者模式的错误实现引起的,而是因为调用了超类Character
,就像java.lang.Character
. 在编写 java 游戏时要小心不要覆盖这个类。
推荐阅读
- leaflet - ios移动设备上未显示的传单标记
- gcc - Bazel构建(或GCC)中的“-c opt”和“--copt = -O3”有什么区别
- c# - LAB 到 RGB 使用 Lcms2 给出奇怪的结果
- c++ - 在 qt 中的拆分器内调整网页大小
- ios - ios 开发/分发证书 - 缺少私钥
- sql - 合并复制错误:您无权运行“SP_TRACE_GENERATEEVENT”
- c++ - std::span.size() 与数组/向量大小
- python - 仅在多索引中的第二个索引上使用 .loc
- angular - 如何更改单击 ionic 2 Angular 上的颜色按钮
- codenameone - 如何解决键盘崩溃?