제이온

[Эффективный Java] Элемент 5. Не указывайте ресурсы явно, используйте внедрение зависимостей

  • Язык написания: Корейский
  • Страна: Все страныcountry-flag
  • ИТ

Создано: 2024-04-28

Создано: 2024-04-28 13:39

Если класс внутренне зависит от одного или нескольких ресурсов, и эти ресурсы влияют на поведение класса, то не следует использовать синглтон и статические утилитарные классы.


Классу не следует создавать эти ресурсы самостоятельно, вместо этого предпочтительнее передавать необходимые ресурсы в конструктор. Инъекция зависимостей позволяет улучшить гибкость, повторное использование и простоту тестирования класса.


Пример

Пример использования статического утилитарного класса

В данном утилитарном классе предполагается использование только одного словаря. Однако на практике словари могут быть разделены по языкам, а также могут существовать отдельные словари для специальной лексики.


Пример использования класса-синглтона


Класс-синглтон также предполагает использование только одного словаря, поэтому он имеет тот же недостаток, что и описанный выше.


Решение 1 - Удалить ключевое слово final из поля.


Можно также удалить ключевое слово final для поля dictionary в статическом утилитарном классе или классе-синглтоне и предоставить возможность извне заменить dictionary на другой словарь. Однако этот подход неудобен в использовании и может привести к проблемам с одновременностью в многопоточной среде.


Решение 2 - Использовать инъекцию зависимостей.


На примере выше видно, что статические классы и классы-синглтоны не должны зависеть от внутренних ресурсов. То есть, внутренние ресурсы предпочтительнее получать извне.


Класс с использованием инъекции зависимостей гарантирует неизменность благодаря ключевому слову final и поддерживает использование нескольких экземпляров ресурсов. Кроме того, инъекция зависимостей может применяться не только в конструкторе, но и в статических фабричных методах и билдерах.


Инъекция зависимостей может просто передавать сам ресурс, но часто используется и передача фабрики ресурсов. Фабрика — это объект, который при каждом вызове создаёт новый экземпляр определённого типа. Такой подход называется шаблоном «Фабричный метод», и Supplier<T> в Java 8 является прекрасным примером реализации фабрики.



Обычно для ограничения типа параметра фабрики используется ограниченный подстановочный знак. Это позволяет клиенту передавать в фабрику любой подтип указанного типа.


Инъекция зависимостей повышает гибкость и простоту тестирования, но в проектах с большим количеством зависимостей может быть весьма затратной. В таких случаях можно использовать фреймворки инъекции зависимостей (Dagger, Guice, Spring и др.), чтобы снизить затраты.


Источники

Комментарии0

Миодезопия: причины, симптомы, диагностика, лечениеУзнайте о симптомах миодезопии, таких как сухость глаз, усталость глаз, снижение остроты зрения, а также о причинах, диагностике и методах лечения. Мы также рассмотрим привычки, способствующие поддержанию здоровья глаз, и распространенные заблуждения.
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

April 5, 2024

Руководство по оптимальным настройкам iPhone для защиты зренияУменьшите напряжение глаз и защитите свое зрение с помощью оптимальных настроек iPhone. Используйте различные функции, такие как темный режим, True Tone и Night Shift, для комфортного использования смартфона.
뉴스코리아
뉴스코리아
뉴스코리아
뉴스코리아

November 4, 2024

Полное руководство по темному режиму iPhone: от настройки до использованияРуководство по настройке и использованию темного режима на iPhone. Три способа настройки для уменьшения утомляемости глаз и экономии заряда батареи, а также ответы на часто задаваемые вопросы. Узнайте, как использовать приложение «Настройки», «Центр управ
뉴스코리아
뉴스코리아
뉴스코리아
뉴스코리아

November 4, 2024

Использование монохромного режима на iPhoneУзнайте, как использовать монохромный режим на iPhone. Подробное описание преимуществ, таких как снижение утомляемости глаз и повышение концентрации внимания, а также способы настройки, полезные советы и ответы на часто задаваемые вопросы. Почувствуйте
뉴스코리아
뉴스코리아
뉴스코리아
뉴스코리아

November 4, 2024

Изменение даты платежа по карте Hyundai Card: простое и быстрое руководствоУзнайте, как изменить дату платежа по карте Hyundai Card, и о важных моментах. Вы можете легко изменить дату через мобильное приложение или веб-сайт; изменения вступят в силу в следующем или через месяц. Обратите внимание, что при просрочке платежа измен
뉴스코리아
뉴스코리아
뉴스코리아
뉴스코리아

November 6, 2024