Я пишу настольную MMO-игру, и я хочу проконсультироваться по вопросу архитектуры. У меня есть такие классы, как NetworkManager, ClientWindow, CachingTextureAtlas, они нужны только в одном экземпляре для игры, и вот мой вопрос: правильно ли сделать их одиночными? Если да, то это будет своего рода взаимодействие через глобальные классы, что не очень хорошо с точки зрения дизайна, как мне кажется, и если нет, мы будем составлять их на фасаде, и нам придется передать их всем конструкторам слишком много классов, что тоже не удобно. Какой лучший выбор?Композиция против нескольких синглетов
ответ
Singleton следует использовать осторожно (почти никогда). Я видел много мест, недавний sceanrio был hibernate session factory, где первоначально мы думали, что единственный экземпляр должен быть прекрасным, но затем натолкнулся на сценарий для нескольких экземпляров и в итоге переработал код. Другая проблема заключается в том, что вы пишете модульные тесты для своего кода, тогда это будет кошмар для всех классов, который зависит от этих одноэлементных классов.
Одним из решений может быть введение какой-либо фабрики, которая может предоставить вам эти экземпляры/она дает вам своеобразное направление и избегает прямого соединения. Другой подход состоит в том, чтобы иметь контейнер (например, контейнер pico) и вводить в качестве зависимостей конструктора, что и вы указали.
- 1. Композиция против агрегирования
- 2. Реагирующая композиция против наследования
- 3. Магазины React-Flux: коллекции против специализированных синглетов
- 4. Индивидуальная композиция против одной ассоциации
- 5. [UML] Композиция против агрегации: уточнение
- 6. Создание синглетов
- 7. Композиция против двунаправленной ассоциации в Java
- 8. Сортировка: композиция против внешних сортировочной установки
- 9. C++ COM дизайн. Композиция против множественного наследования
- 10. Композиция против наследования для базового контроллера iOS
- 11. Нарушение старых синглетов
- 12. SKPhysicsBody композиция?
- 13. Несколько загрузчиков классов и синглетов
- 14. Композиция видео из нескольких видеороликов с альфой
- 15. Несколько синглетов класса в iOS
- 16. Объекты внутри синглетов в .Net
- 17. Почему контроллеры синглетов в Ember?
- 18. Функциональная композиция
- 19. Композиция Grails GORM или hasOne?
- 20. сложная композиция в усах
- 21. Композиция ломтиков ломтиков
- 22. Один против нескольких флажков
- 23. нескольких булевых против строки
- 24. Многопоточность против нескольких приложений
- 25. Совпадения против нескольких выборок
- 26. CTE против нескольких вставок
- 27. Рекурсивная композиция в C++
- 28. F #: Композиция шаблона?
- 29. Композиция в базе данных
- 30. Polykinded типа композиция
+1 для предложения инъекции зависимости. пропустили это :) – greenkode
Итак, вы против подхода синглтона, и что вы предлагаете сделать фабрикой, содержащей экземпляры классов? Или каждый раз предлагать новый экземпляр? Я использую Spring DI на стороне сервера, и я подумаю о том, чтобы уйти от синглтонов, но что мы должны делать с клиентской стороной, где нет смысла весной? И в случае CachingTextureAtlas очень дорого создавать экземпляр каждого раза, спасибо;) – OneMoreVladimir
@OneMoreVladimir Я бы предпочел пойти с инъекцией зависимостей. это абстрагирует реализацию от методов, вызывающих ее. следовательно, вы можете изменить реализацию и, скорее всего, никогда не будете использовать код рефакторинга. – greenkode