поэтому в данном сценарии я не совсем уверен, как бы я реализовал это более ООП.
Учитывая следующий контекст:
- В моей игре есть суперкласс Entity
- Существа (движущиеся объекты) и StaticEntities (деревья/камни/и т.д.) расширяют Entity
- У меня есть класс EntityManager.
В моем EntityManager я проверяю, зависает ли моя мышь над Entity. Если это так, я визуализирую наложение, которое показывает панель с именем сущности на ней.
В дополнение к названию я также хотел бы отобразить что-то вроде некоторых основных характеристик, таких как «здоровье» и, возможно, «мощность / максимальный удар» или что-то в этом роде. Статические Сущности не имеют боевых атрибутов. Существа, однако, делают это, но поскольку я возвращаю Сущность, я проверяю, является ли Сущность «экземпляром» Существа, и если да, то рисую боевую статистику. В противном случае просто нарисуйте имя сущности.
Может ли быть лучший, более объектно-ориентированный способ проектирования этой конструкции? Я читал, что instanceof можно избежать с помощью дизайна полиморфизма/OO.
Связанный фрагмент кода:
if(hoveringEntity instanceof Creature) {
hoveringEntity = (Creature) hoveringEntity;
// Custom Util class to draw a String
Text.drawString(g, "Max hit: " + getDamage(hoveringEntity), x, y, true, Color.YELLOW, Assets.font14);
}
getDisplayInfo()
, который возвращает то, что должно отображаться. Затем вы можете переопределить это, чтобы предоставить столько информации, сколько хотите. В данный момент вы пишете в императивной манере, если х — это сущность, сделайте то, если х — существо, сделайте то, тогда как это должно быть скорее позволение х делать то, что ему нужно. - person Kayaman   schedule 23.11.2017