Решение домашнего задания на тему "Шаблоны проектирования" курса "Автоматизированное тестирование ПО на Python".
При проектировании архитектуры игры использовались следующие паттерны проектирования:
- Порождающий «Абстрактная фабрика» для создания семейства связанных объектов: воинов, специализирующихся на том или ином виде оружия или умении «Мечник», «Лучник», «Маг», но в разных вариациях: «Люди», «Чудовища». Данное решение позволяет сохранять единство свойств и атрибутов класса воинов, например, мечников, но с учётом особенностей той или иной вариации, людей или чудовищ. А также, расширять игровые возможности за счёт создания новых вариаций и классов воинов.
- Вышеуказанный паттерн проектирования был, также, использован для создания предметов игрового мира. В качестве семейства связанных объектов выступают модификации игровых предметов: «Стандартный», «Уникальный» и т.д. А вариациями предметы: «Меч», «Лук», «Книга заклинаний» и т.д. В будущем это позволит создавать комплекты - наборы предметов, при наличии которых у игрового персонажа будет возможность получить какие-нибудь бонусные умения или свойства. И также, расширять игровые возможности за счёт добавления новых предметов и их вариаций.
- Поведенческий «Состояние» для создания различных объектов - событий в игре и их управления ими. Паттерн «Состояние» позволяет создавать отдельные классы для каждого игрового события, в котором может пребывать объект - игра, а также, определить, «поведения», соответствующие этим событиям. Объект - игра содержит ссылку на один из объектов-событий и может делегировать ему работу, определённую в событии. Благодаря тому, что объекты событий имеют общий интерфейс, игра сможет делегировать работу событию, не привязываясь к его классу. Поведение игры можно менять в любой момент, «подключив» к ней другой объект-событие. Важным моментом является то, что и объект-игра, и сами конкретные тигровые события могут знать друг о друге и инициировать переходы от одного события к другому.
- Поведенческий «Снимок» для реализации возможности сохранения текущего состояния игры - состояния игрового персонажа и загрузки этого состояния при проигрыше. Паттерн «Снимок» предоставляет создание копии состояния самому объекту - игровому персонажу, который этим состоянием и владеет, поскольку ему доступны все атрибуты и свойства, даже защищённые. Копии состояния игрового персонажа хранятся независимо от объекта, в специальном объекте-снимке с ограниченным интерфейсом. Сами объекты-снимки хранятся другими объектам, называемым «опекунами». В нужный момент опекун может «попросить» игрового персонажа восстановить своё состояние, передав ему соответствующий снимок.