1. 程式人生 > >Effective Java——01 靜態方法替代構造器

Effective Java——01 靜態方法替代構造器

1.靜態方法替代構造器

先以一段程式碼開頭,有個大概的瞭解:

//動物類
public class Animal {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

一般來說,我們建立動物物件會是這樣,

public static void main(String[] args) {
        Animal animal = new Animal();
}

用靜態方法改變之後,animal類就會成這樣

public class Animal {
    private String name;
    private String age;
    
    //私有構造方法
    private Animal(){
    }

    //提供創造例項的靜態方法
    public static Animal getInstance(){
        return new Animal();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

}

呼叫變為這樣,

 public static void main(String[] args) {
      Animal animal = Animal.getInstance();
 }

2.書中闡述了靜態工廠方法與構造器的幾個優點和缺點。

優點:

1.靜態方法有名稱。

2.不必在每次呼叫它們的時候都建立一個新物件(可以整成單例模式)。

3.它們可以返回型別的任何子型別物件(利用多型)。

4.在建立引數化例項的時候,它們使程式碼更加簡潔。

缺點:

1.類如果不含共有的或者受保護的構造器,就不能被子類化。

2.與其他靜態方法實際上沒任何區別(想要了解具體如何例項化一個類,是非常困難的)。