静态工厂方法替代构造器
内容
优点 :
1. 返回的对象, 客户端生成对象的代码更容易被阅读. 常用构造器的参数本身没有确切地描述正被返回的对象.
2. 不必在每次调用的时候都创建一个新的对象. 如果程序经常请求创建相同的对象 , 那这种方式极易提升性能.
3. 返回原返回类型的任何子类型的对象.
4. 创建参数类型实例的时候,使代码变得更加简洁.缺点 :
- 类如果不含共有的或者受保护的构造器, 就不能被子类化.
- 与其他静态方法实际没有任何区别
静态工厂方法 :
- java中常见的静态工厂方法命名 :
valueOf()
of()
newInstance()
getType()
newType()
getInstance() - 常见的静态工厂方法实现由Sington单例模式;
- java中常见的静态工厂方法命名 :
多个构造器参数时要考虑用构建器
- 场景 : 初始化对象实例具有多个构建参数.
- AnTipattern(反模式) : 避免JavaBean模式构建, 除非保证线程安全, 否则多线程访问会有大问题.
- 解决方案 : 使用Builder模式来构建多参的对象
私有构造器或者枚举类型强化Singleton属性
- 最佳单例模式的实现 : 枚举Enum单例模式
单例模式更多了解,请直接看这篇博客;
通过私有构造器强化不可实例化的能力
- 类的静态方法调用, 无需实例化构造器
避免创建不必要的对象
可重用的变量, 可以设置为静态变量, 并且通过静态代码块来初始化, 达到避免重复创建对象的目的.
private static final Persion PERSION; static{ //initialize PERSION PERSION = new Persion(); }
消除过期对象引用
作用 : 消除内存泄漏
方法 :
- 清空过期引用, 常用方式 object = null;
- 内存泄漏来源于缓存 , 建议 WeakReference包裹之;
- callback以及监听持有的匿名类, 建议也用WeakRefence包裹, 但还是需根据实际场景处理.
finalize()函数的使用
- 使用try{}finally{}代码块 , 释放资源, 例如cursor,bitmap等等
- finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
- Java中所有类都从Object类中继承finalize()方法