Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象池、IoC和;工厂:何时何地?_Java_Design Patterns_Dependency Injection_Factory Pattern_Pool - Fatal编程技术网

Java 对象池、IoC和;工厂:何时何地?

Java 对象池、IoC和;工厂:何时何地?,java,design-patterns,dependency-injection,factory-pattern,pool,Java,Design Patterns,Dependency Injection,Factory Pattern,Pool,在没有new操作符和构造函数的情况下,存在许多不同的实例化类的方法,我正在寻找普遍接受的用例/场景,以确定何时选择其中一个 显然,在某些情况下,将对象池化是不合适的,例如,您不知道池会有多大,或者您知道池会很大 但是,什么才是需要池化的合适场景呢?什么时候池比依赖注入或工厂类更具优势 类似地,什么时候可以选择使用工厂类而不是依赖注入,反之亦然?依赖注入源于代码拥有无数工厂的时代。因此,DI是工厂的方便替代品。您可以将DI上下文称为通用工厂。此外,对象池可以是在DI上下文中定义的bean。尽管对象

在没有
new
操作符和构造函数的情况下,存在许多不同的实例化类的方法,我正在寻找普遍接受的用例/场景,以确定何时选择其中一个

显然,在某些情况下,将对象池化是不合适的,例如,您不知道池会有多大,或者您知道池会很大

但是,什么才是需要池化的合适场景呢?什么时候池比依赖注入或工厂类更具优势


类似地,什么时候可以选择使用工厂类而不是依赖注入,反之亦然?

依赖注入源于代码拥有无数工厂的时代。因此,DI是工厂的方便替代品。您可以将DI上下文称为通用工厂。此外,对象池可以是在DI上下文中定义的bean。尽管对象池实现了应用程序代码必须使用的接口,以保持池的一致性。与DI上下文bean相比,从池中检索的对象具有不同的生命周期:

Widget oPooledWidget = (Widget)oObjectPool.borrowObject();
Widget oInjectedWidget = oAppContext.getBeans("widget");
Widget oFactoryWidget = oWidgetFactory.createWidget();
pool = appContext.getBean("connectionPool");
conn = pool.get();
try {
  // .. do stuff
} finally {
  conn.close();
  // or
  pool.release(conn);
}