優(yōu)點(diǎn):
①構(gòu)造函數(shù)的方法名必須跟類名一樣,調(diào)用方調(diào)用代碼很難快速被讀懂。使用工廠方法(跟設(shè)計(jì)模式的工廠方法不一樣蹬蚁,本處指的是在目標(biāo)類中直接加靜態(tài)方法),則方法名就代表該方法要?jiǎng)?chuàng)建的對(duì)象的特征铸敏,調(diào)用端的調(diào)用的時(shí)候比較清楚自己要建造什么樣的對(duì)象缚忧,不容易選錯(cuò)方法,而且代碼也比較容易讀懂杈笔。例如:
...
public static BigInteger probablePrime(int bitLength, Random rnd) {
......
}
...
②可以使用單例或有限多例闪水,達(dá)到內(nèi)存優(yōu)化利用的目的。
例如:
...
public static Boolean valueOf(String s) {
return toBoolean(s) ? TRUE : FALSE;
}
...
③可以采用接口類的靜態(tài)方法來(lái)返回要構(gòu)建的對(duì)象以達(dá)到隱藏實(shí)現(xiàn)的目的蒙具,調(diào)用方不需要關(guān)心具體構(gòu)建的是哪個(gè)實(shí)現(xiàn)類的對(duì)象球榆。
④方法參數(shù)不同,返回的對(duì)象的類型也可以不同禁筏;在不同的發(fā)布版本中持钉,靜態(tài)方法返回的對(duì)象也可能有所不同。
⑤目標(biāo)對(duì)象的實(shí)現(xiàn)類可以不存在篱昔,在真正運(yùn)行時(shí)才明確每强,jdbc就是采用這種方式。
缺點(diǎn):
①?zèng)]有公共構(gòu)造函數(shù)的類不能有子類州刽。不過(guò)反過(guò)來(lái)思考空执,根據(jù)設(shè)計(jì)模式原則,一般鼓勵(lì)用組合方式而不建議用繼承方式穗椅。
②不像構(gòu)造函數(shù)那樣名字一定是跟類名一致辨绊,靜態(tài)方法往往比較難被找到,需要編程人員肉眼一個(gè)一個(gè)方法找過(guò)去匹表。該缺點(diǎn)可以通過(guò)規(guī)范化命名來(lái)盡量規(guī)避门坷,例如get開(kāi)頭,intance開(kāi)頭袍镀、valueOf開(kāi)頭默蚌、create開(kāi)頭、new開(kāi)頭等等苇羡。