1.使用静态工厂方法(静态方法里返回对象)代替构造器。
- 静态方法有名字,便于理解。如:from(转化)、of(聚合)、instance(实例)、create(创建)、getObject、
- 可以实现享元模式,某些方法可以返回某一个对象(存起来)。
- 可根据参数返回不同的对象甚至对象的子类。
2.遇到多个构造器参数时使用构建器模式
- 避免大量set、避免多个构造器无法区分问题。
3.单例模式
- 普通单例模式可以受到反射和序列化的攻击,虽然可以解决,比较麻烦。要保证的只有一个对象,最好的办法是通过枚举实现单例。
- 实现方式很简单:只有一个实例的枚举类,这个实例就是单例的。
4.只有静态方法的工具类提供私有的构造器
5.依赖注入
- 一个类的运行往往依赖一系列其他类的功能,为了解耦应该依赖这些类的接口,在当前类使用的时候(实例化)才传入相关的依赖类,可通过构造器或者set方式,这是spring等依赖注入框架的使用原因。
- spring的依赖注入需要注意,简单的autowire其实有性能消耗的,spring其实更推荐使用构造器或set方式进行注入,因为这样使用者才不会引人冗余的对象。
6.避免创建不必要的对象
- 有些对象创建成本很高,可以将创建的对象缓存起来,如 正则表达式对象。
- 有些对象创建一个就行,如适配器对象。
7.清除过期对象的引用
- 正常的编程中不需要主动清除对象引用,栈帧出栈后局部变量会被自动回收。跟gc roots无关的节点会自动回收。
- 类自己管理的内存的,比如容器,就需要自己回收过期对象。
- 不是很重要的内存缓存最好使用weakHashMap(虚引用)。
8.避免使用终结方法和清除方法
就没用过终结方法和清除方法。暂不纠结了,学习一下AutoCloseable接口。
- AutoCloseable是配合try-with-resources使用的,try的内容执行完后自动调用AutoCloseable接口实现的方法,1.7之前使用try finally{}里关闭资源,finally是由另外线程监听执行的,失效性不强。