1 . 考虑用静态工厂方法代替构造方法
优势: (1)它们有名称 .
(2)不必每次调用时候都新建一个对象。
(3) 可以返回原返回类型的任何子类型对象。
(4)创建参数实例化对象时候,代码变的简洁。
不足: (1)类如果不含有公有或者受保护的对象,就不能被子类化。
(2)与静态方法其实没有任何区别。
2、遇到多个构造器参数的时候考虑用构造器,参数多时候难以控制,不便于阅读。可以考虑使用javaBean。还有一种就是使用Builder模式。
package com.test.t;
/**
* builder pattern
* @author fky
*
* use :
* NutritionFacts coc = new NutritionFacts.Builder(22,55).calories(100).sodium(20).carbohydrate(20).build();
*
*/
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder{
//Required parameters
private final int servingSize;
private final int servings;
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;
public Builder(int servingsSize, int servings)
{
this.servingSize = servingsSize;
this.servings = servings;
}
public Builder colories(int val)
{
calories = val;
return this;
}
public Builder fat(int val)
{
fat = val;
return this;
}
public Builder carbohydrate(int val)
{
carbohydrate = val;
return this;
}
public NutritionFacts build()
{
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder)
{
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
3 、用私有构造器或者枚举类型强化Singleton属性
1.5后的一种新的Singleton
public enum Elvis
{
INSTANCE;
public void leaveTheBuilding(){}
}
4、通过私有构造器强化不可实例化的能力
5、 避免创建不必要的对象
package com.test.t;
public class Test {
public static void main(String[] args)
{
long t1 = System.currentTimeMillis();
Long sum = 0L;
for(long i = 0; i < Integer.MAX_VALUE;i++)
{
sum += i;
}
long t2 = System.currentTimeMillis();
System.out.println(t2 - t1);
/*
t1 = System.currentTimeMillis();
long sum1 = 0L;
for(long i = 0; i < Integer.MAX_VALUE;i++)
{
sum1 += i;
}
t2 = System.currentTimeMillis();
System.out.println(t2 - t1);*/
}
}
6、 消除过期的对象引用
7、避免使用终结方法 (finalizer)