Объекты Бассейны, IoC и фабрики: когда и где? - PullRequest
0 голосов
/ 21 сентября 2011
Widget oPooledWidget = (Widget)oObjectPool.borrowObject();
Widget oInjectedWidget = oAppContext.getBeans("widget");
Widget oFactoryWidget = oWidgetFactory.createWidget();

Существует множество различных способов создания экземпляров классов без оператора new и конструктора, и я ищу общепринятые варианты использования / сценарии, когда нужно выбирать один из других.

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

Точно так же, когда нужно выбрать использование фабричного класса по сравнению с внедрением зависимостей, и наоборот?

1 Ответ

2 голосов
/ 21 сентября 2011

Внедрение зависимостей произошло с того времени, когда в коде было несколько миллионов фабрик. Таким образом, DI является удобной заменой фабрикам. Вы можете назвать DI context как универсальную Фабрику. Кроме того, пул объектов может быть компонентом, определенным в контексте DI. Хотя пул объектов реализует интерфейс, который код приложения должен использовать для обеспечения согласованности пула. Объекты, извлеченные из пула, имеют другой жизненный цикл по сравнению с бинами контекста DI:

pool = appContext.getBean("connectionPool");
conn = pool.get();
try {
  // .. do stuff
} finally {
  conn.close();
  // or
  pool.release(conn);
}
...