静态工厂简介
选择实现类、创建对象统一管理和控制。
实现了创建者和调用者的分离。
用工厂方法代替new操作。
用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)
常见应用场景:
1.JDK中java.util.concurrent包中的Executors类,就是一个静态工厂,用来创建各种线程池。代码示例用这个案例
类图
Executors是一个静态工厂类,里面用静态方法封装了创建各种不同的线程池
创建普通固定容量线程池源码
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
创建工作窃取线程池源码
public static ExecutorService newWorkStealingPool() {
return new ForkJoinPool
(Runtime.getRuntime().availableProcessors(),
ForkJoinPool.defaultForkJoinWorkerThreadFactory,
null, true);
}
ExecutorService是线程池抽象接口,ThreadPoolExecutor和ForkJoinPool是它的抽象实现类AbstractExecutorService
的子类。
在使用线程池的时候,可以直接用静态工厂Executor封装的静态创建方法得到线程池,而不需要自己去new线程池。(这里只是用它来举例说明静态工厂模式,实际并不推荐这样使用线程池,因为Executors中封装的创建线程池全部是无界队列,有安全隐患)
ExecutorService executorService = Executors.newFixedThreadPool();