Effective Java:对象的创建及销毁

2018-06-10  本文已影响10人  Il_mondo

第一节:通过静态工厂创建对象

public class Person {
    private byte sex;
    private String name;

    public static Person newMan(String name){
        return new Person(0, name);
    }

    public static Person newWoman(String name){
        return new Person(1, name);
    }

    public Person(String sex, String name){
        this.sex = sex;
        this.name = name;
    }

    public static void main(String[] args){
         // 静态工厂
        Person jeck = Person.newMan("Jeck");
        // 构造
        Person tom = new Person(0, "Tom");
    }
}

相较于构造方法创建对象,静态工厂总是能很清晰的突出我们要做的事.

...
// 例:单例模式
private static Person INSTANCE;
public static Person newMan(String name){
    if(INSTANCE == null){
        INSTANCE = new Person(0, name);
    }
    return INSTANCE;
}

// 例:软引用持有对象
private SoftReference<Person> person;
public static Person newMan(String name){
    if(person == null || person.get() == null){
        person = new SoftReference(new Person(0, name));
    }
    return person;
}

总结:通过静态工厂创建对象更回灵活、可阅读性更好.


第三节:通过私有构造或枚举强化单例

特别注意点:防止单例的序列化

// 在类中添加此方法
private Object readResolve(){
    return INSTANCE;
}
public enum Person{
    INSTANCE;
}

第四章:通过私有构造器强化强化不可实例化的能力

public final class Strings{
   private Strings(){ throw new AssertionError(); }

   public static boolean isEmpty(String string){
       return string == null || string.length < 0;
   }
}

第五章:避免创造不必要的对象

重用不可变对象

上一篇 下一篇

猜你喜欢

热点阅读