創(chuàng)建和銷毀對象(一)

在面向?qū)ο缶幊讨校魏未a都圍繞著類和對象宏赘;一個類在使用之前必須要實例化一個對象呻疹,然后對這個對象進(jìn)行操作;正如我在“對象導(dǎo)論”中所說的佛析,類是組成問題空間的基本單位,若干個類將問題空間抽象出來彪蓬,而對象便是類在解空間中的投影寸莫;因為類是抽象的,所以類沒有任何具象的意義寞焙,只有在解空間中储狭,給對象賦值之后,這個對象被數(shù)據(jù)具象化成一個有數(shù)據(jù)意義的實體捣郊,并且問題空間中的類的對象聚合之后才能形成具體的辽狈,能表達(dá)實體意義的解空間;在java中呛牲,生成對象的方法很多刮萌,相應(yīng)的,生成了對象就必須適時的銷毀對象娘扩,因為存儲空間總是有限的着茸,我們不可能放任對象無止境的去占用我們的存儲空間,這對軟件以及硬件都不是一個好消息琐旁;

每一個類都需要有構(gòu)造方法來構(gòu)造一個對象涮阔,當(dāng)沒有編寫具體的構(gòu)造方法時,java會自動給出一個無參的構(gòu)造函數(shù)public Object(); ?這個構(gòu)造方法會返回一個所有屬性都為默認(rèn)值的對象灰殴;所以有必要自己編寫構(gòu)造函數(shù)來更加高效的生成對象敬特;

1.使用靜態(tài)工廠來替代構(gòu)造器

典型例子:


這是Boolean類中的一個靜態(tài)方法,他通過入?yún)順?gòu)造一個Boolean類牺陶;

使用靜態(tài)方法來構(gòu)造對象不會在每次調(diào)用他們的時候都創(chuàng)建一個新的對象伟阔,這使得不可變類可以使用預(yù)先構(gòu)造好的實例或者將構(gòu)建好的實例緩存起來,而不是反復(fù)的去構(gòu)建一模一樣的實例然后再銷毀掰伸;靜態(tài)構(gòu)造方法從來不創(chuàng)建對象皱炉,如果程序經(jīng)常請求創(chuàng)建一模一樣的對象,使用靜態(tài)構(gòu)造方法將大大提升性能狮鸭;

靜態(tài)構(gòu)造方法有確切的名字合搅,這使得客戶端開發(fā)者在調(diào)用時可以很明確的知道他將要調(diào)用的方法會生成一個什么樣的結(jié)果多搀;

同時,靜態(tài)構(gòu)造方法可以返回原返回類型的任何子類灾部,這使程序有更大的靈活性酗昼;

靜態(tài)工廠的第四個優(yōu)勢在于,所返回的對象的類可以對著每次調(diào)用而發(fā)生變化梳猪,這取決于靜態(tài)方法的入?yún)⒙橄鳎晃覀冇袝r候會根據(jù)參數(shù)的不同來構(gòu)造不同的對象,這時候靜態(tài)構(gòu)造方法可以靈活的幫助我們自動構(gòu)造我們需要的對象春弥;

第五點(diǎn)呛哟,方法返回的對象所屬的類,在編寫包含該靜態(tài)方法的類時可以不存在匿沛;這使得代碼可擴(kuò)展性很高扫责,客戶端程序猿可以很方便的去擴(kuò)展服務(wù)端提供的框架;這就是 服務(wù)提供者框架 在這個框架中逃呼,服務(wù)提供者編寫若干個api鳖孤,而開發(fā)者可以通過不斷去編寫新的類去是現(xiàn)在這個api,從而不斷的擴(kuò)充這個api的功能抡笼;

靜態(tài)方法的缺點(diǎn)主要在于苏揣,如果這個類沒有共有或者受保護(hù)的構(gòu)造起,則不能被實例化推姻;還有一點(diǎn)平匈,開發(fā)者很難去發(fā)現(xiàn)這些靜態(tài)構(gòu)造方法;

常見的構(gòu)造方法命名:

from:類型轉(zhuǎn)換藏古;

Of:聚合增炭;

valueOf:將入?yún)⑥D(zhuǎn)換為該類;

instance/getInstance:返回的實例是通過方法的參數(shù)來描述的拧晕,如果可以的話隙姿;

getType:蕾絲getInstance,type表示工廠方法所返回的對象類型厂捞;

create/newInstance:類似于getInstance输玷,但是這兩個關(guān)鍵詞表示的方法一般都會確保每次調(diào)用都返回一個新的實例;

2.當(dāng)構(gòu)造器參數(shù)較多時蔫敲,使用構(gòu)建器

靜態(tài)工廠和構(gòu)造器都有個共同的缺點(diǎn)饲嗽,無法很好的多個可選參數(shù)進(jìn)行擴(kuò)展炭玫;

首先奈嘿,重疊構(gòu)造器:


開發(fā)者在實例化對象時,可以對具體的需求選擇需要的構(gòu)造器吞加;

在編寫類時我們并不知道今后在構(gòu)造實例時到底需要多少個屬性裙犹,所以多寫幾個構(gòu)造器總是好的尽狠,調(diào)用不同的構(gòu)造器會生成不同的類;


當(dāng)你想要構(gòu)造實例的時候叶圃,就調(diào)用對應(yīng)你想要的構(gòu)造器就可以了袄膏;


但是這么寫的話,當(dāng)參數(shù)很多很多的時候掺冠,客戶端的代碼就會很麻煩沉馆,一大串而且難以閱讀;其實java本身已經(jīng)幫助我們解決了這個問題(javaBean方法)德崭,大不了就new一個無參的實例斥黑,然后一個一個調(diào)用set方法弄進(jìn)去;但是這個方法并不是線程安全的眉厨,也就是說javaBean在構(gòu)造過程中可能處于不一致的狀態(tài)锌奴,這使得無法構(gòu)造不可變類,除非開發(fā)者自己保證線程安全憾股;

當(dāng)然了鹿蜀,還有更好的方法 建造者模式(builder):

話不多說先上代碼


建造者模式模擬了具名的可選參數(shù),這使得客戶端開發(fā)代碼十分易于閱讀服球;

而且茴恰,建造者模式也適用于類層次結(jié)構(gòu),類似于抽象工廠中的概念斩熊;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琐簇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子座享,更是在濱河造成了極大的恐慌婉商,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣叛,死亡現(xiàn)場離奇詭異丈秩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)淳衙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蘑秽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箫攀,你說我怎么就攤上這事肠牲。” “怎么了靴跛?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵缀雳,是天一觀的道長。 經(jīng)常有香客問我梢睛,道長肥印,這世上最難降的妖魔是什么识椰? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮深碱,結(jié)果婚禮上腹鹉,老公的妹妹穿的比我還像新娘。我一直安慰自己敷硅,他們只是感情好功咒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绞蹦,像睡著了一般航瞭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坦辟,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天刊侯,我揣著相機(jī)與錄音,去河邊找鬼锉走。 笑死滨彻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挪蹭。 我是一名探鬼主播亭饵,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梁厉!你這毒婦竟也來了辜羊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤词顾,失蹤者是張志新(化名)和其女友劉穎八秃,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肉盹,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昔驱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了上忍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤肛。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窍蓝,靈堂內(nèi)的尸體忽然破棺而出腋颠,到底是詐尸還是另有隱情,我是刑警寧澤吓笙,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布淑玫,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏混移。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一侮穿、第九天 我趴在偏房一處隱蔽的房頂上張望歌径。 院中可真熱鬧,春花似錦亲茅、人聲如沸回铛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茵肃。三九已至,卻和暖如春袭祟,著一層夾襖步出監(jiān)牢的瞬間验残,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工巾乳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留您没,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓胆绊,卻偏偏與公主長得像氨鹏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子压状,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

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