Шаблон посетителя был бы действительно хорошим подходом к рассмотрению в такой ситуации. Скажем, вы делаете игру, которая должна реагировать по-разному на разные объекты (Cat, Dog, Money и т. Д.). Так что это:
сделать интерфейс IAnimal
, который имеет следующее определение:
interface IAnimal {
void visit(IAnimalVisitor visitor, Object param);
}
class Cat implements IAnimal {
void visit(IAnimalVisitor visitor, Object param) {
visitor.visit(this, param);
}
}
class Dog implements IAnimal {
void visit(IAnimalVisitor visitor, Object param) {
visitor.visit(this, param);
}
}
IAnimalVisitor
будет содержать один visit()
метод для каждого типа животных определены.Так оно и будет:
interface IAnimalVisitor {
public void visit(Cat c, Object param);
public void visit(Dog c, Object param);
}
Тогда вы могли бы использовать свою логику для борьбы с кошкой и собакой по вашему желанию. Например:
class AnimalFeeder implements IAnimalVisitor {
public void visit(Cat c, Object param) {
c.feed(milk);
c.feed(cat_food);
}
public void visit(Dog d, Object param) {
d.feed(dog_food);
}
}
Затем вы можете использовать выше пищевого класса кормления, чтобы кормить вас IAnimal
массив как это:
IAnimal[] animals = new IAnimal[] { new Cat(), new Dog(),
new Dog(), new Cat() };
IAnimalVisitor feeder = new AnimalFeeder();
for(IAnimal animal : animals) {
animal.visit(feeder, null);
}
Вы можете достичь полной свободы, чтобы иметь дело с любым уровнем иерархии внутри классов. Просто поставьте visit()
для каждого типа класса животных в пределах IAnimalVisitor
.
Вы можете проверить класс объекта во время выполнения ('obj.getClass()'), но это не обязательно избавит вас от плохого дизайна. Что вы пытаетесь достичь? – Perception
if (myAnimalObj instanceof CAT) или if (myAnimalObj instanceof CAT) – Jayamohan
Хорошо, я пытаюсь имитировать игру, где у вас есть кошка или собака, и в зависимости от того, какие вещи должны произойти. Я прокручиваю свой массив и пытаюсь установить переменную, равную текущей ячейке, а затем использовать оператор if, чтобы проверить, является ли это собакой или кошкой. –