1.考虑用静态工厂方法代替构造器
- 静态方法有名称,通过静态方法可以很明确的知道返回的是什么对象。例如BigInteger.probablePrime()
- 静态方法不必每次都创建一个新的实例。对于某些返回对象是不可变类时可以提升性能。例如Boolean.valueOf(boolean)
- 静态方法可以返回任何类型的子类型。这样面对接口编程的时候,我们可以不关心返回对象的具体的实现,只关心接口暴露的方法即可
- 在创建参数化实例的时候,可以使代码变得更加简洁。比如:
|
|
2.在遇到多个构造器参数时考虑用Builder
|
|
例如一个对象有多个属性需要设置,我们可以在构造方法中设置,如下,但是在调用时会
Person person = new Person(19, “名字”, 180);如果参数一旦变多则维护起来略麻烦,这时会考虑使用set方法,但是使用set方法在多线程中是不安全的,这时可以考虑采用Builder模式。
|
|
通过上面这种方式很清晰。
3.用私有构造器或者枚举属性强化Singleton属性
在java1.5后可以通过枚举来实现单例,这种方法简洁,而且创建的过程是线程安全的,12345678910111213141516public enum Person { INSTANCE; public String getName() { return name; } public void setName(String name) { this.name = name; } private String name;} Person.INSTANCE.setName("kevin"); System.out.println(Person.INSTANCE.getName());
4.通过私有构造器强化不可实例化的能力
对于一些工具类来说,它只存在静态方法,这时它并不想被实例化,因此最好强化不可实例化的能力,给它添加私有构造器。
5.避免创建不必要的对象
String s = new String("kevin");
在这里”kevin” 本来就是一个String对象,这时就多创建了一个对象。
同时除了重用不可变对象之外,也可以重用已知不会被修改的对象。
|
|
因为Java的自动装箱机制导致下面的代码会产生很多对象1234Long l = 0L;for(long i = 0;i < Long.MAX_VALUE; i++) { l += i;}
6.消除过期的引用
Java