#java #decoupling
#java #развязка
Вопрос:
Я некоторое время работаю над Java. Я видел, что слишком много разговоров о разделении объектов. Я вижу, что они говорят, что ключевое слово «new» считается символом высокой связи. До сих пор я не получил никакого ответа, почему это так. кто-нибудь может мне объяснить?
Комментарии:
1. Да, где они скорее хотели бы видеть инъекцию. Но есть довольно много случаев, возможно, большинство из них, когда вы не вводите, а используете
new
в любом случае, например, вnew List<String>
new BigDecimal(...)
… кто бы вводил такие вещи?2. использование нового слова должно куда-то уйти. Итак, вы должны решить, когда выгодно удалить эту связь. Существует ряд библиотек, которые предоставляют эту возможность.
Ответ №1:
Well new
создает экземпляр определенного класса. Поэтому всякий раз, когда вы используете new
, вы создаете связь между создаваемым классом и кодом, который его создает. Пример:
List<String> strings = new ArrayList<>();
создает экземпляр ArrayList
, что является проблемой, если вам не нужно жестко настраивать код для использования этой конкретной реализации List
API.
Обратите внимание, что Java new
не позволяет вам делать имя класса параметром. Даже с параметрами универсального типа.
Альтернативой является использование заводской функции или объекта или использование внедрения зависимостей для отделения кода, которому требуется экземпляр класса, от процедуры, которая его создает. (Или передавайте Class
объекты в качестве параметров и используйте отражение для создания экземпляров.)