1. 程式人生 > 其它 >Effective java 閱讀筆記-第01條 靜態工廠方法詳解

Effective java 閱讀筆記-第01條 靜態工廠方法詳解

Java 靜態工廠方法在實際開發中經常使用,在《Effective Java》中第二章第一條即為:考慮使用靜態工廠方法代替構造器。

靜態工廠方法的含義
靜態工廠方法指的是在類中提供一個公有的靜態方法,返回類的一個例項。

01 靜態工廠方法的第一大優勢:它們有名稱

類的構造器名稱被限制為類名,然而當構造器因不同的引數型別而無法確切的描述被返回的物件時,靜態工廠方法卻可以提供不同的函式名稱作為不同構造方法。
例如如下程式碼:

package com.aozhan1;

public class Person {
    private String name;
    private int age;
    
private String gender; public Person() { } public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } //靜態工廠方法 public static Person getManInstance(String name, int age,String gender){ return
new Person(name, age, gender); } public static Person getWomanInstance(String name, int age,String gender){ return new Person(name, age, gender); } public String getName() { return name; } public void setName(String name) { this.name = name; }
public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }

02 靜態工廠方法第三大優勢:他們可以返回原返回型別的任何子型別的物件

這樣我們在選擇返回物件的類時就有了更大的靈活性。
這種靈活性的一種應用是,API可以返回物件,同時又不會使物件的類變成公有的。以這種方式隱藏實現類會使API變得非常簡潔。這項技術適用於基於介面的框架(interface-basedframework),因為在這種框架中,介面為靜態工廠方法提供了自然返回型別。介面不能有靜態方法,因此按照慣例,介面Type的靜態工廠方法被放在一個名為Types的不可例項化的類(見第4條)中。
示例程式碼如下:

public class Person {
    public static Person getStudent(){
        return new Student();
    }
}
class Student extends Person {

}//僅為一無內涵的示例

參考文獻:https://blog.csdn.net/HelloTheWholeWorld/article/details/89102596