Item 1:使用靜態(tài)工廠方法而不是構(gòu)造器

這個(gè)文集,是我讀Effective Java的筆記。Udacity的老師說哆料,如果你想養(yǎng)成一個(gè)習(xí)慣,就要在你每天的schedule里面拿出一段固定的時(shí)間留給這件事吗铐。深表贊同东亦。下面開始。


這篇是<Effective Java>中的第一條唬渗。

什么是static factory method

看看Boolean.java中的一個(gè)靜態(tài)工廠方法:

//類型轉(zhuǎn)換
    public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }

好處

第一個(gè)好處:可以自己取名字-->方法名中能體現(xiàn)與實(shí)例有關(guān)的信息

構(gòu)造方法可以創(chuàng)建一個(gè)對(duì)象的instance典阵,靜態(tài)工廠方法也可以得到一個(gè)instance。這里一個(gè)顯著的區(qū)別是镊逝,靜態(tài)工廠方法可以自己取名字萄喳。自己取名字有什么好處?很多情況下我們想要?jiǎng)?chuàng)建不同類型的實(shí)例蹋半,會(huì)通過overload(重載)構(gòu)造函數(shù)來達(dá)到目的。但缺點(diǎn)是沒法判斷得到的是什么樣的instance充坑,而取名字的話就可以從方法名中能得到與實(shí)例有關(guān)的信息减江。

這樣做的缺點(diǎn):用戶難以識(shí)別類中到底哪些靜態(tài)方法專門負(fù)責(zé)返回類的實(shí)例。解決方法是采用約定俗成的命名捻爷,比如:

  1. valueOf:該方法返回的實(shí)例與它的參數(shù)具有同樣的值辈灼,例如:
Integer a=Integer.valueOf(100); //返回取值為100的Integer對(duì)象
  1. getInstance:返回的實(shí)例與參數(shù)匹配,例如:
 Calendar cal=Calendar.getInstance(Locale.CHINA); //返回中國(guó)日歷

第二個(gè)好處:可以返回不同的類型也榄,比如子類

這個(gè)在Collections中用得多巡莹。比如創(chuàng)建一個(gè)List,可以返回一個(gè)ArrayList甜紫。

第三個(gè)好處:不用每次創(chuàng)建新對(duì)象

例如單例模式降宅。還有上面的Boolean的valueOf函數(shù)。

第四個(gè)好處:簡(jiǎn)潔

//使用構(gòu)造器創(chuàng)建
Map<String, List<String>> m1 = new HashMap<String, List<String>>();
//使用靜態(tài)工廠方法創(chuàng)建
Map<String, List<String>> m2 = HashMap.newInstance();

壞處

  • 如果類中沒有提供public或protected的構(gòu)造器囚霸,將造成該類不能子類
    我的理解:這是因?yàn)檠绻割愔挥衟rivate的構(gòu)造方法,它是沒辦法被子類繼承的拓型。子類的構(gòu)造方法會(huì)自動(dòng)用super()調(diào)用父類的public/protected構(gòu)造方法额嘿,但如果沒有public或者protected方法瘸恼,就沒法被繼承。

「單例」的新理解

這里我對(duì)單例有了更深刻的理解册养。因?yàn)閱卫褪侵挥衟rivate的構(gòu)造方法的东帅;這即是說,單例的意義不僅僅在于不創(chuàng)建新的實(shí)例球拦,而且在于不返回這個(gè)實(shí)例的任何子類instance靠闭。

private Singleton() {}  

(突然想去去年面試網(wǎng)易,人家讓我寫個(gè)單例我都寫得磕磕絆絆刘莹。阎毅。

  • 靜態(tài)工廠方法和其他靜態(tài)方法本質(zhì)上并沒有區(qū)別。

See Also:
https://zhidao.baidu.com/question/536956881.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末点弯,一起剝皮案震驚了整個(gè)濱河市扇调,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抢肛,老刑警劉巖狼钮,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捡絮,居然都是意外死亡熬芜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門福稳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涎拉,“玉大人,你說我怎么就攤上這事的圆」呐。” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵越妈,是天一觀的道長(zhǎng)季俩。 經(jīng)常有香客問我,道長(zhǎng)梅掠,這世上最難降的妖魔是什么酌住? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮阎抒,結(jié)果婚禮上酪我,老公的妹妹穿的比我還像新娘。我一直安慰自己且叁,他們只是感情好祭示,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般质涛。 火紅的嫁衣襯著肌膚如雪稠歉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天汇陆,我揣著相機(jī)與錄音怒炸,去河邊找鬼。 笑死毡代,一個(gè)胖子當(dāng)著我的面吹牛阅羹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播教寂,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捏鱼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了酪耕?” 一聲冷哼從身側(cè)響起导梆,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迂烁,沒想到半個(gè)月后看尼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盟步,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年藏斩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片却盘。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狰域,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出黄橘,到底是詐尸還是另有隱情北专,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布旬陡,位于F島的核電站,受9級(jí)特大地震影響语婴,放射性物質(zhì)發(fā)生泄漏描孟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一砰左、第九天 我趴在偏房一處隱蔽的房頂上張望匿醒。 院中可真熱鬧,春花似錦缠导、人聲如沸廉羔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憋他。三九已至孩饼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竹挡,已是汗流浹背镀娶。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揪罕,地道東北人梯码。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像好啰,于是被迫代替她去往敵國(guó)和親轩娶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容