У меня есть эта конкретная проблема, которую я не мог решить с другими вопросами.Я пытаюсь реализовать посетителя для игры, посетитель класса Attack
, и он должен искать в матрице ячейки, которые могут содержать Characters
, тогда, если персонаж является врагом, а не другом, наносит уронit.
У меня возникли проблемы не с использованием InstanceOf
для посещения персонажа, так как это нарушает принцип Open-Closed.Вот мой код:
Интерфейс посетителя
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 {
}
Атака бетонаclass
public class TankAttack extends Attack{
...
@Override
public void visit(GroundCell c) {
//here, i'd like to call c.getCharacter.accept(this)
}
Но я получаю ошибку, которая говорит Я должен сначала реализовать Visit (Символ c) , когда он мне нужен только для его подклассов.
Что я должен делать в классе TankAttack, чтобы посещать подклассы Друг или Враг персонажа и не нарушать дизайн с помощью InstanceOf?
Редактировать для пояснения: Друг и враг являются подклассами персонажа.