優點:
可以確切描述返回什麼物件,避免構造不規範
可以不必在每次呼叫時都建立新的物件
它可以返回該類的子類物件,程式更加靈活
返回的物件可以根據指定引數生成,引數不同,物件就不同
返回物件所屬的類,可以與該類無關
例項化物件時,不要第一反應就是提供公有構造器,而不先考慮靜態工廠方法
概念都是不好理解的,通過例項來理解概念
參考自知乎使用者,uncle-lv
假如一所大學有三個學院,資訊學院,財經學院,工程學院,我們不想把建立學院交給外部,因為外部不了解該大學的結構,這時候靜態工廠方法就起作用了,類提供乙個公有的靜態工廠方法可能創造乙個不存在的學院,但是,我們又要提供建立學院的介面,這時候該怎麼做?
【優點1】:使用靜態工廠模式確定要返回什麼物件,避免構造不規範
public class college
//提供3種建立方法
public static college getinfomationcollege()
public static college getfinancecollege()
public static college getengineercollege()
public string getname()
}
【優點2】:可以不必在每次呼叫時都建立新的物件
//有時候我需要多次呼叫靜態方法得到該物件,但是學院只要建立乙個,我們先呼叫一下
college college1 = college.getengineercollege();
college college2 = college.getengineercollege();
system.out.println(college1 == college2); //false
//很明顯,生成了兩個學院,這不符合我們的需求,所以第一段**,還有改進的空間
private static college infomationcollege;
public static college getinfomationcollege()
return college.infomationcollege;
}//再來測試一下
college college1 = college.getengineercollege();
college college2 = college.getengineercollege();
system.out.println(college1 == college2); //true
有乙個人的類,我們通過靜態工廠方法生成其子類【優點3】: 它可以返回該類的子類物件,程式更加靈活
這樣我們返回的都是person的子類物件,我們不必知道adult類和child類的存在,程式更加靈活
【優點4】:所放回的物件的類何以隨著每次呼叫而發生變化,這取決於靜態工廠方法的引數值
每次返回的型別因引數的都不同
public class person
if(age > 18)
return null;
}private static class child extends person
}//成員內部類
private static class adult extends person
}}
【優點5】:
1、什麼時候使用靜態工廠方法?
2、缺點
靜態工廠方法代替構造器
靜態工廠方法的優勢 1它們有名稱,表意更清楚。2不必在每次呼叫它們的時候都建立乙個新物件 3它們可以返回原返回型別的任何子型別的物件。4在建立引數化型別例項的時候,它們是 變得更加簡單。缺點 1類如果不含有公有的或者受保護的構造器,就不能被子類化 2它們與其他的靜態方法實際上沒有任何區別,不方便辨認...
1 考慮用靜態工廠方法代替構造器
1.考慮用靜態工廠方法代替構造器 例子 public static boolean valueof boolean b 使用靜態工廠替代構造器的優勢 1 他們有名稱 2 不必每次呼叫都產生新的物件 3 可以返回原返回型別任何子型別的物件 4 建立引數化型別例項的時候,使 更簡潔 缺點 1 類如果不含...
No1 用靜態工廠方法代替構造器
先來看乙個例子 下面這個方法將boolean基本型別值轉換成了乙個boolean物件引用 public static boolean valueof boolean b 如果不通過共有的構造器,或者說除了公有的構造器之外,類還可以給他它的客戶端提供靜態工廠方法。提供靜態工廠方法而不是公有的構造器,這...