對(duì)象健身操九式

優(yōu)秀設(shè)計(jì)背后的七條核心概念

內(nèi)聚性,松耦合闲昭,零重復(fù)罐寨,封裝,可測(cè)試性序矩,可讀性鸯绿,單一職責(zé)。

采用這些規(guī)則的關(guān)鍵在于:只要使用Java語(yǔ)言簸淀,就應(yīng)該使用面向?qū)ο蟮乃伎肌?/p>

規(guī)則1:方法只使用一級(jí)縮進(jìn)

動(dòng)機(jī):龐大的方法往往缺少內(nèi)聚性瓶蝴,一個(gè)常見(jiàn)的原則是將方法控制著5行以內(nèi)(不包括入?yún)z查)。你可以嘗試讓每個(gè)方法只做一件事情——每個(gè)方法只保護(hù)一個(gè)控制結(jié)構(gòu)或一個(gè)代碼塊租幕。

方法:利用IDE的抽取方法的功能舷手,不斷的抽取方法中的行為,直到一個(gè)方法只有一級(jí)縮進(jìn)位置劲绪。

“運(yùn)用這些規(guī)則的技能是一種藝術(shù)男窟,它能將程序員提升到一個(gè)新的高度盆赤。”

規(guī)則2:拒絕else關(guān)鍵字

動(dòng)機(jī):復(fù)雜的條件判決難于理解歉眷,而且易產(chǎn)生重復(fù)代碼牺六。

方法:對(duì)于簡(jiǎn)單判斷可以使用衛(wèi)語(yǔ)句和提前返回,對(duì)于復(fù)雜的條件判斷則可以使用多態(tài)汗捡。另外也可以使用策略模式淑际。

規(guī)則3:封裝所有的原生類型和字符串

動(dòng)機(jī):整數(shù)只是代表一個(gè)數(shù)量,沒(méi)有實(shí)際的含義凉唐。用類來(lái)表示原生類型,比如年霍骄,月台囱,日等。這樣可以進(jìn)行嚴(yán)格的類型檢查读整。

規(guī)則4:一行代碼只有一個(gè)“.”(或者“->”)運(yùn)算符

動(dòng)機(jī):如果一行中含有多個(gè)“.”簿训,則說(shuō)明很多職責(zé)的位置放置錯(cuò)了。嘗試讓對(duì)象為你做一些事情米间,而不要窺視對(duì)象內(nèi)部的細(xì)節(jié)强品。封裝的含義就是,不要讓類的邊界跨入到它不應(yīng)該知道的類型中屈糊。

規(guī)則5:不要使用縮寫

動(dòng)機(jī):縮寫的原因:1)一遍一遍的敲打同樣的單詞的榛,則可能是因?yàn)槟硞€(gè)方法調(diào)用過(guò)于頻繁——要消除一下重復(fù)。2)方法名字太長(zhǎng)——可能是職責(zé)沒(méi)有放在應(yīng)該在的位置或者有確實(shí)的類逻锐。

方法:所有實(shí)體對(duì)象的名稱都只能包含一到兩個(gè)單詞夫晌,不要使用縮寫。

規(guī)則6:保持對(duì)象實(shí)體簡(jiǎn)單清晰

動(dòng)機(jī):超過(guò)50行的類所做的事情通常都不止一個(gè)昧诱。這會(huì)導(dǎo)致他們難以理解和重用晓淀。這意味著每個(gè)類的長(zhǎng)度不能超過(guò)50行。每個(gè)包所包含的文件不超過(guò)10個(gè)盏档。

規(guī)則7:任何人類中的實(shí)例變量不要超過(guò)兩個(gè)

動(dòng)機(jī):將一個(gè)對(duì)象從擁有大量屬性的狀態(tài)凶掰,解構(gòu)成分層次的,相互關(guān)聯(lián)的多個(gè)對(duì)象蜈亩,會(huì)直接產(chǎn)生一個(gè)更實(shí)用的對(duì)象模型懦窘。將一個(gè)復(fù)雜的大的對(duì)象,分解成多個(gè)簡(jiǎn)單的對(duì)象稚配。

方法:可以將實(shí)例變量按照相關(guān)性分離在兩個(gè)部分中奶赠;可以創(chuàng)建一個(gè)新的對(duì)象來(lái)封裝兩個(gè)已有的實(shí)例變量。

規(guī)則8:使用一流的集合

集合的概念應(yīng)該是一類實(shí)例的集合药有。比如毅戈,定時(shí)器對(duì)象的集合——包括所有的定時(shí)器苹丸。我一般是放在定時(shí)器類中,然后使用static來(lái)表示集合苇经∽咐恚看了這個(gè)方法要改一下了。

任何包含集合的類都不能再包含其他的成員變量扇单。每個(gè)集合都被封裝在自己的類中商模。集合其實(shí)是一種應(yīng)用廣泛的原生類型。

規(guī)則9:不要使用任何的Geter/Setter/Proerty

Geter/Setter/Proerty會(huì)對(duì)對(duì)象的封裝性找出破壞蜘澜。

在嚴(yán)格封裝的邊界背后施流,真正的動(dòng)機(jī)是迫使程序員在完成編碼后,一定要為這段代碼的行為找到一個(gè)合適的位置鄙信,確保它在對(duì)象模型中的唯一性瞪醋。

這樣可以減少重復(fù)性的差錯(cuò),以及在添加新特性的時(shí)候装诡,可以在一個(gè)更合適的位置引入變化银受。

這九條原則可以作為對(duì)面向?qū)ο髢?yōu)秀設(shè)計(jì)的訓(xùn)練(可以通過(guò)一個(gè)小的項(xiàng)目),但是鸦采,在實(shí)際的過(guò)程中不可以教條的應(yīng)用上面的原則宾巍。引用P.J.?Plauger的話:

“你在應(yīng)用某種設(shè)計(jì)方法的時(shí)候越教條化,你所能解決的現(xiàn)實(shí)問(wèn)題就會(huì)越少渔伯。請(qǐng)把設(shè)計(jì)看出是一個(gè)險(xiǎn)惡的顶霞,雜亂的和啟發(fā)式的過(guò)程(沒(méi)有教條化的規(guī)則可以遵循,能夠巧好解決現(xiàn)實(shí)問(wèn)題的方案才是最佳的方案)锣吼。不要停留于你所想到的第一套方案确丢,而是去尋求合作,探求簡(jiǎn)潔性吐限,在需要的時(shí)候做出原型鲜侥,迭代,并進(jìn)一步迭代诸典。你將對(duì)你的設(shè)計(jì)成果感到滿意描函。”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狐粱,一起剝皮案震驚了整個(gè)濱河市舀寓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肌蜻,老刑警劉巖互墓,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蒋搜,居然都是意外死亡篡撵,警方通過(guò)查閱死者的電腦和手機(jī)判莉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)育谬,“玉大人券盅,你說(shuō)我怎么就攤上這事√盘矗” “怎么了锰镀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)咖刃。 經(jīng)常有香客問(wèn)我泳炉,道長(zhǎng),這世上最難降的妖魔是什么嚎杨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任花鹅,我火速辦了婚禮,結(jié)果婚禮上磕潮,老公的妹妹穿的比我還像新娘翠胰。我一直安慰自己容贝,他們只是感情好自脯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著斤富,像睡著了一般膏潮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上满力,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天焕参,我揣著相機(jī)與錄音,去河邊找鬼油额。 笑死叠纷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的潦嘶。 我是一名探鬼主播涩嚣,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掂僵!你這毒婦竟也來(lái)了航厚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锰蓬,失蹤者是張志新(化名)和其女友劉穎幔睬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芹扭,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麻顶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年赦抖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈蚌。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摹芙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宛瞄,到底是詐尸還是另有隱情浮禾,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布份汗,位于F島的核電站盈电,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏杯活。R本人自食惡果不足惜匆帚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旁钧。 院中可真熱鬧吸重,春花似錦、人聲如沸歪今。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寄猩。三九已至嫉晶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間田篇,已是汗流浹背替废。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泊柬,地道東北人椎镣。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兽赁,于是被迫代替她去往敵國(guó)和親状答。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,970評(píng)論 6 13
  • 1.埋點(diǎn)是做什么的 2.如何進(jìn)行埋點(diǎn) 3.埋點(diǎn)方案的設(shè)計(jì) 近期常被問(wèn)到這個(gè)問(wèn)題闸氮,我擔(dān)心我的答案會(huì)將一些天真爛漫的孩...
    lxg閱讀 2,018評(píng)論 0 1
  • 讓閱讀之花競(jìng)相開(kāi)放——第二屆蘇派名師精品課堂(名著閱讀)研討活動(dòng) 引子:每一次出門學(xué)習(xí)都是一種淬煉與升華剪况,淬煉一個(gè)...
    絲語(yǔ)隨筆閱讀 1,153評(píng)論 1 22
  • 文/常慶旺 童年最快樂(lè)的時(shí)光總是有好多,記得在每年春天的時(shí)候蒲跨,滿地的油菜花盛開(kāi)译断,黃燦燦的一大片,我會(huì)和玩伴們...
    常慶旺閱讀 593評(píng)論 2 3