Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание "Персонаж"

Основные папки

Обзор архитектуры персонажа

Скриншот Текст
Основным компонентом архитектуры, является класс Character, реализующий паттерн Facade. Он предоставляет простой интерфейс для использования модулей персонажа
Скриншот Текст
При этом сам класс не знает заранее, требуемые для его реализации модули, что, во-первых, уменьшает связность класса и модулей, а, во-вторых, позволяет добавлять/подменять модули в рантайме
Скриншот Текст
CharacterLoader инициализирует и устанавливает зависимости всех классов персонажа

Алгоритм расширения фасада

  1. Предположим, что мы хотим добавить в существующий фасад функцию NewBehaviour, основанную на модуле с интерфейсом INewModule. Чтобы добавить эту функцию в интерфейс нужно:
  2. Добавить эту функцию в существующий интерфейс ICharacterFacade, либо создать новый mixin интерфейс с сигнатурой этой функции
  3. Создать список с типами интерфейсов модулей, которые требуются для работы функции. В данном случае он будет содержать только тип typeof(INewModule)
  4. Добавить проверку наличия использованных в функции модулей. CheckModules(созданный список)
  5. Достать и распокавать из хэш-таблицы требуемые модули. (INewModule)_usedModules["INewModule"]
  6. Добавить логику взаимодействия с модулем
  7. *Привязать этот модуль в CharacterLoader, если он ещё не привязан

Таким образом, код созданной функции будет выглядеть так: При этом предыдщуий код фасада не будет затронут совершенно

Интерактивные предметы

Скриншот Текст
Логика интерактивного предмета реализована по паттерну стратегия. Эффект предмета определяется хранимой реализацией интерфейса IEffect
Скриншот Текст
Было реализовано 3 эффекта предмета, а также 3 вида предмета (большой, средний и маленький)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages