Задать вопрос
@RandomProgrammer

Как правильно спроектировать?

Предположим есть игра. В игре есть базовый класс Unit, от него наследуются другие персонажи - Mage, Warrior, Paladin, подобных классов много. Проблема в том что нужно где-то хранить ссылки на них, для того чтобы можно было манипулировать списком сразу всех персонажей (установка настроек, рандомный выбор, выбор для игрока, и проч.), а не создавать конкретный. Если хранить список в отдельном static поле, то его каждый раз придётся изменять, когда будет написан ещё один тип, а это как минимум нарушает принцип единой ответственности. Существует ли механизм (или паттерн), который автоматически сохраняет вновь ново созданный тип персонажа в общий список? Как обычно поступают в подобных ситуациях?
  • Вопрос задан
  • 66 просмотров
Подписаться 2 Средний 2 комментария
Решения вопроса 1
@GLeBaTi
1) Руками добавлять новый тип в список
2) Через рефлексию добавлять в словарь все дочерние типы
https://stackoverflow.com/questions/857705/get-all...
3) Через конфиг
4) Через IoC добавить несколько реализаций. Вот пример
services.AddSingleton<IService, ServiceA>();
services.AddSingleton<IService, ServiceB>();
services.AddSingleton<IService, ServiceC>();
var myIServices = serviceProvider.GetServices<IService>();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы