Привет, плохая девчонка / Джозеф ; -)
Чтобы ответить на заголовок вашего вопроса (ничего о внутренностях netbeans):
Я думаю этот вопрос немного отвечает на ваш вопрос что такое поиск : извлечение одной или нескольких реализаций в предоставленный ключ, который обычно является интерфейсом.
Затем Джозеф спросил: «Какой простой шаблон может заменить этот анти-шаблон?».
Вы не можете заменить шаблон поиска в платформе NetBeans, но для ответа на его вопрос: я бы использовал внедрение зависимостей вместо поиска в моем приложении через ручную разводку, подсказку, пико-контейнер или даже пружину.
Приятной особенностью такой библиотеки является то, что вы настраиваете только зависимости и извлекаете правильно сконфигурированные экземпляры из контейнера. Посмотрите эту красивую картинку , чтобы почувствовать это.
(Большинство инструментов внедрения зависимостей позволяют также управлять жизненным циклом.)
Чтобы привести пример внедрения зависимости через ручное подключение, предположим следующий класс:
class Path {
List edges = new ArrayList();
public void setEdges(List e) {
edges = e;
}
}
Теперь вы можете легко переключать реализацию ArrayList с помощью LinkedList:
p = new Path();
p.setEdges(new LinkedList());
С концепцией поиска это не так просто (но я не уверен):
class Path {
List edges = Lookup.create(List.class);
}
Теперь использование с заменой связанного списка просто:
Lookup.set(List.class, LinkedList.class);
p = new Path();
но проблема в следующем: как бы вы использовали поиск, если у вас есть несколько разных классов, которым требуется реализация List?
Вы реализуете свой поиск в зависимости от класса, который его использует:
class Path {
List edges = Lookup.get(Path.class).create(List.class);
}
Но, честно говоря: я предпочитаю простой способ внедрения зависимостей. Прочитайте это введение , где они также сравнили поиск и внедрение зависимостей (конструктор + внедрение сеттера).
Для получения дополнительной информации прочитайте эту интересную статью от Мартина Фаулера , которая описывает сервисные локаторы (поиск) и инверсию управления (внедрение зависимостей). Читайте здесь об истории внедрения зависимостей .