Выполняем задание на Abstract Factory Pattern часть 1
В первой части мы создадим абстрактную фабрику танков, по одному экземпляру каждого танка и проведем бой между случайными танками СССР и Германии.
Структура программы:
Весь код программы находится по адресу: https://github.com/Norfin85/TankBattle
Опишу лишь пару, на мой, взгляд интересных моментов.
Момент 1:
Классы LightUssrTank, MediumUssrTank, HeavyUserTank имеют различный показатель armor. Все переменные в классах имеют модификатор private, а значит объявление переменной должно происходить в классе . Но UssrFactory возвращает объекты класса Tank, а значит поле armor будет недоступно в этих объектах. Эту проблему можно решить следующим образом:
В абстрактом классе Tank объявляется абстрактная функция getArmor:
А в конкретных класса объявляется переменная armor и реализация функции getArmor:
Момент 2: в абстрактом классе задается конструктор, а в классе-наследнике UssrMediumTank он используется используя ключевое слово super(), при этом класс UssrMediumTank имеет свой конструктор с большим количеством полей. Это позволяет нам объединять общие параметры для всех классов-наследников в один общий абстрактный класс.
И сама главная программа:
Программа пока очень громоздкая и не учитывает скорость стрельбы при встрече лоб в лоб. Это все будет исправлено во второй части путем создания таймера боя и очков действия танков. Также внутрь объектов будет помещена их ориентация.
И еще некоторые модификации...)
С форматированием кода совсем беда.
From the main menu, select Code | Reformat Code or press Ctrl+Alt+L.
Alternatively, in the project tool window, right-click the directory and from the context menu, select Reformat Code.
Почему задание ?
1. Имплементация фабрики неверная.
2. Убери наследование.
3. Добавь проперти тип танка и/или страна.
В этом случае, у тебя фабрика будет полностью ответствена за создания танка. В случае каких-либо модификаций, тебе нужно лишь в одном месте это сделать. Наследование будет тебя ограничивать. Плюс проще тестировать.