用静态工厂方法代替构造器
来源:互联网 发布:linux系统是什么 编辑:程序博客网 时间:2024/05/17 03:05
面对更新迅速的互联网技术,非科班出身的孩子更要努力学习。最近在学习android的同时也同步学习数据结构与算法(我的简书http://www.jianshu.com/u/62f2144f08e0,欢迎观看)与Effective Java。尤其是Effective Java,看了顿时觉得书上说的好有道理,感觉进入了一个新的学习领域。
静态工厂方法相对于构造器的优势:
1、静态工厂方法有名称。
构造器的名称是固定的,当有多个构造器时,调用容易搞混。静态工厂方法是名称是任意的,可以为它起一个代表其用途的名称,方便调用。
//两种不同类型线程池 /** * Creates a thread pool that creates new threads as needed, but * will reuse previously constructed threads when they are * available, and uses the provided * ThreadFactory to create new threads when needed. * @param threadFactory the factory to use when creating new threads * @return the newly created thread pool * @throws NullPointerException if threadFactory is null */ public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), threadFactory); } /** * Creates a thread pool that reuses a fixed number of threads * operating off a shared unbounded queue. At any point, at most * {@code nThreads} threads will be active processing tasks. * If additional tasks are submitted when all threads are active, * they will wait in the queue until a thread is available. * If any thread terminates due to a failure during execution * prior to shutdown, a new one will take its place if needed to * execute subsequent tasks. The threads in the pool will exist * until it is explicitly {@link ExecutorService#shutdown shutdown}. * * @param nThreads the number of threads in the pool * @return the newly created thread pool * @throws IllegalArgumentException if {@code nThreads <= 0} */ public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
2、静态工厂方法不必在每次调用的时候创建一个新的对象
创建一个私有的构造器,并通过静态工厂通过单例模式进行调用可以保证对象的重用,避免不必要的对象创建。
Boolean a=Boolean.valueOf(false); //静态工厂方法不创建对象,只复用Boolean b=new Boolean(false);
3、静态工厂方法可以返回类型的任何子类型的对象
主要适用于面向接口编程,根据输入参数的不同,输出不同类的实例,这样既可以提高灵活性,也降低了对象间的耦合度。
4、静态工厂方法创建参数化类型实例时,代码更简洁
Map<String,List<String>> m=new HashMap<String, List<String>>();Map<String,List<String>> m=HashMap.newInstance();public static <k,v> HashMap<k,v> newInstance(){ return new HashMap<k,v>(); }
静态工厂方法相对于构造器的劣势:
1、类如果没有共有的或受保护的构造器,就不能被子类化。此时就只能复合不能继承了。
阅读全文
0 0
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 静态工厂方法代替构造器
- 用静态工厂方法代替构造函数
- 01、考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- [Effective Java]考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 《Effective Java》-考虑用静态工厂方法代替构造器
- 第一条:用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- EffectiveJava-考虑用静态工厂方法代替构造器
- 01-考虑用静态工厂方法代替构造器
- 01_考虑用静态工厂方法代替构造器
- 统计| p值的计算
- AngularJS 1.5 版本Component详解
- 做个寡言,但心有一片海的人
- 南阳理工oj 题目289 苹果 01背包
- 2017年上海金马五校程序设计竞赛(网上资格赛)Problem A : Corn's new language
- 用静态工厂方法代替构造器
- 年龄
- USACO-Section1.3 Combination Lock【暴力枚举】
- 静态顺序表(C语言实现)
- caffe——solver及其配置
- JavaScript基础
- 问题 F: Binary to Prime
- vs2008里的#include " "
- 搜索 H题