生活中的OO智慧:大話面向?qū)ο笪宕笤瓌t
一·單一職責(zé)原則(Single-Responsibility Principle)
定義:一個對象應(yīng)該只包含單一的職責(zé),并且該職責(zé)被完整地封裝在一個類中。
宿舍里并不能好好學(xué)習(xí),自習(xí)還是得去圖書館。這是一條顛撲不破的真理!被無數(shù)學(xué)子千百次的實(shí)踐所證明!我就想不通了,宿舍里有桌有椅,能上床小睡,能下床讀書,餓了吃外賣,渴了喝奶奶,自個習(xí),憑啥就不行?后來,由于我刻苦地學(xué)習(xí),增漲了科學(xué)文化知識,這才搞明白,原來我們的宿舍違背了“單一職責(zé)原則”。除了不是廁所,宿舍既是臥室,又是餐廳,既是書房,又是廚房,還是游戲機(jī)室兼棋牌室,甚至還兼琴房及健身房。我勒個去!你想看書,甲在看球,乙在泡面,丙在泡腳,還有一大波同學(xué)隨時(shí)準(zhǔn)備過來串門,發(fā)小廣告,送外賣。所以,“看書”這個“方法”還是得放在“圖書館”這個“類”,或者“自習(xí)室”這個“類”中,因?yàn)檫@是它們的職責(zé),并且它們是職責(zé)單一的。并不是說宿舍里就絕對不可以看書,而是由于它承擔(dān)了過多的職責(zé),這些職責(zé)在并發(fā)執(zhí)行的時(shí)候就會相互干擾。
“單一職責(zé)原則”其實(shí)也蘊(yùn)含著深沉的人生智慧——任何事情要想做好就必須要專心致志地做——軒轅黃帝曰“守一”,堯舜薪傳“惟精惟一”,《周易》曰“貞一”,老子曰“執(zhí)一”,管子曰“專一”,都是在教導(dǎo)我們這個樸素的道理。學(xué)習(xí)也好,工作也好,要想取得成就,就必須要“惟精惟一”。社會生產(chǎn)之所以要分工,如今更是高度分工,同樣也是因?yàn)檫@個道理。大浪淘沙,作為一名程序員,如何在激烈的競爭中站穩(wěn)腳跟,甚至立于不敗之地呢?沒有別的辦法,一個字:“精一”!如果你還在對各種技術(shù)泛泛地涉獵,卻沒有一樣拿手好戲,那么趕緊依據(jù)“單一職責(zé)原則”重構(gòu)一下自己吧!
二·開放封閉原則(Open-Closed Principle)
定義:軟件實(shí)體應(yīng)當(dāng)對擴(kuò)展開放,對修改關(guān)閉。
如果你想讓自己更好看,無非有兩種辦法。你可以穿花衣服,做頭發(fā),涂各種霜擦各種粉,可以戴帽子戴紅領(lǐng)巾,這些都是“擴(kuò)展”。另外,你也可以割雙眼皮,開眼角,墊鼻梁墊眉弓墊下巴,祛咬肌磨腮,而這些當(dāng)然就是“修改”。之所以要對擴(kuò)展開放而對修改關(guān)閉,是因?yàn)樾薷某3J俏kU(xiǎn)的,是需要付出代價(jià)的。因整容失敗而慘死手術(shù)臺的新聞早就不稀奇了,至于韓苗可、喬絲琳-威登斯坦、風(fēng)扇大媽這樣的例子我就不舉了,不是怕嚇著大家而是自己害怕。很簡單的道理嘛,一修改就容易出現(xiàn)Bug,而且常常是些意想不到的Bug,Duang ~ ~,加特技的Bug!
說到這里,另外一件修改源代碼的事就不得不提了——轉(zhuǎn)基因!猶記得高中學(xué)生物的時(shí)候,一個令人聞風(fēng)喪膽的名字深深地刻進(jìn)了彼時(shí)我幼小的心靈,歷久彌新,那就是——“BT毒蛋白”——我天!變態(tài)毒蛋白!這是有多毒!這變態(tài)毒蛋白本源自“蘇云金芽孢桿菌”,后來,偉大的科學(xué)家們發(fā)現(xiàn)了它,并將它的基因片段拼切到了轉(zhuǎn)基因水稻、轉(zhuǎn)基因大豆,轉(zhuǎn)基因棉花上(糧油棉全給占領(lǐng)了?。趺纯丛趺聪窨苹闷械墓植┦繗缡澜绲墓?jié)奏······雖然關(guān)于轉(zhuǎn)基因作物安全性的問題至今仍有爭議,但是這種修改造物主底層源代碼的行為讓身為程序員的我們倍感擔(dān)憂啊!誰知道會出現(xiàn)什么樣的Bug!也許某天Duang ~ ~的一下,就出現(xiàn)了一個加特技的Bug!
#p#
三·依賴倒轉(zhuǎn)原則(Dependency-Inversion Principle)
定義:高層模塊不應(yīng)該依賴底層模塊,他們都應(yīng)該依賴抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。
前些年我們經(jīng)常聽到一個說法,叫“一切向錢看”,的確是當(dāng)今社會的某種真實(shí)寫照。憤青朋友請稍安勿躁,關(guān)于現(xiàn)代性批判的話題后頭我們會談,這里還是先來肯定一下資本主義的巨大成就。假使我們是原始社會,并沒有錢。好了,我想吃肉!可是咱家窮,沒肉。而我的鄰居養(yǎng)了幾只野雞,但是“偷來搶來做女婿換來”恐怕都不妥,好在我前些日用玄鐵打了一只絕世好劍,于是我對鄰居道:“拿我絕世好劍換君一只雞,何如?”,鄰居曰;“要得!”,于是我有了一頓豪華午餐。一個月后,我又想吃肉!這回我拿出剛煉好的一顆大還丹,對鄰居道:“拿我起死回生大還丹換汝一只雞,中不中?”,鄰居白我一眼,道:“我—要—喝—奶—奶!”。沒辦法,為了吃雞,我跑到七里之外的隔壁部落,先找一個老婆婆,用我起死回生大還丹換了她兩個壇子,又拿其中一個壇子跟當(dāng)?shù)匾粋€養(yǎng)奶牛的大伯換了一壇奶,剛好用另一個壇子裝回去(還是蠻機(jī)智的?。缓蟀涯探o鄰居喝了,當(dāng)然壇子還得還回來,我這才如愿以償吃到了一只野山雞。漸漸的,大家都覺得這樣換東西實(shí)在太麻煩了!于是,大家交都愿意換最常用的東西,比如鹽啊,布啊,斧子啊,因?yàn)檫@些東西基本家家都要用而且以后方便換成其他東西??墒?,有些人口味淡不要鹽,有些人陰虛火旺不要布,有些人老弱病殘不要斧子,況且,鹽容易撒,布容易破,斧子容易生銹,所以還是不方便。
于是再后來,貨幣就誕生了,它的作用就是充當(dāng)“一般等價(jià)物”。任何商品都有其價(jià)值,所謂交換無非是按各自的價(jià)值量來交換,既然如此,那就找一個東西代表這個抽象的價(jià)值量,其他東西都來跟個它換就OK了!而這不正體現(xiàn)了“依賴倒轉(zhuǎn)原則”嗎?
四·里氏代換原則(Liskov-Substituent Principe.)
定義:所有引用基類的地方必須能夠透明地使用其子類的對象。
亞里士多德著名的三段論:“人都是有死的,蘇格拉底是人,所以蘇格拉底是有死的?!边@不就是一個“里氏代換”嗎?同樣,你、我、他都is-a人,根據(jù)里氏代換原則當(dāng)然也都是“有死的”。
“人固有一死”這個道理大家都知道,但是不見得都懂得。托翁有篇小說叫做《伊凡·伊里奇之死》,講的是一個小人物,半生庸庸碌碌,比上不足比下有余,突然有一天生病住進(jìn)了醫(yī)院,醫(yī)生護(hù)士、親戚朋友們都說“你會好起來的?!逼鸪跛约阂策@樣認(rèn)為??墒菦]過多久他突然意識到,自己這回恐怕好不了了,于是陡然意識到“死亡”其實(shí)是一個相當(dāng)嚴(yán)肅的問題!我們平時(shí)總是在逃避“死亡”問題,對其敷衍塞責(zé)。正如所有人不假思索地對伊凡·伊里奇說“你會好起來的”,就像你訂外賣催單的時(shí)候客服永遠(yuǎn)不假思索地答復(fù)“已經(jīng)送出去了!”。魯迅先生有篇著名小說——某家生了個大胖小子,一人說:“這小子以后一定會發(fā)財(cái)!”,主人敬酒;一人說:“這小子以后一定會做官!”,主人致謝;一人說:“這小子以后一定會死。”,亂棍打出!我們逃避對死的思考,某種意義上就是在逃避對生的思考。
中國人忌諱說“死”常換成說“百年之后”,而“百年”就好比“飛流直下三千尺”的“三千尺”,反正就是很長很長,我們總覺得“來日方長”??墒鞘聦?shí)上,即便“壽終正寢”也無非就是“秋后問斬”。而剩下的人則隨時(shí)會被自然災(zāi)害、交通事故、突發(fā)疾病、飛來橫禍奪去生命!死其實(shí)離我們很近!就如同一把懸在我們頭頂?shù)倪_(dá)摩克利斯之劍。所以海德格爾這樣定義死:“死是最本己的,無所關(guān)聯(lián)的,確知而不確定的,超不過的可能性?!奔热凰朗恰翱赡苄浴保俏覀兙捅仨毭嫦颉翱赡苄浴被I劃選擇自己的人生。所以海德格爾主張“提前到死中去”亦即“向死而生”!毛主席曾講“中國人連死都不怕還怕困難?”,在“人終有一死”面前還有什么事情不能去做呢?還有什么事情不能去嘗試呢?人生苦短,老病相催,真要在碌碌一生之后才發(fā)現(xiàn)“一失足成千古恨,再回首已百年身”嗎?
參考閱讀本人另一篇博客:??清明時(shí)節(jié)欲斷魂——未知死焉知生?——向死而生!??
#p#
五·接口隔離原則(Interface-Segregation Principle)
定義:客戶端不應(yīng)該依賴那些它不需要的接口。
網(wǎng)絡(luò)快速改變著人們的心智狀態(tài),讓人們始終處于“在線(on-line)”狀態(tài)。我們的思考是眾包的、公布式的,不再有中心。我們總是看別人在發(fā)表什么觀點(diǎn),總是聽別人在聊什么話題,于是轉(zhuǎn)發(fā)、轉(zhuǎn)發(fā),再轉(zhuǎn)發(fā)。你看姚晨做公益,你學(xué)李開復(fù)做自己,你在方韓大戰(zhàn)中站隊(duì)……你的內(nèi)心是由他們構(gòu)成的雜拌兒??赡阕约耗??我們?yōu)閯e人而活——為了父母的期待,領(lǐng)導(dǎo)的盼望,同事朋友之間的比較而活得爭先恐后,可你有為自己活過嗎?我們被各種刺激出來的欲望裹挾——我們想向別人一樣住大房子,開豪車,想出人頭地,有一百部想看的電影,想周游世界,想投資理財(cái),想買各種看得順眼的商品,可是你清楚自己究竟需要什么嗎?
我們不應(yīng)依賴于那些我們不需要的接口。當(dāng)年,蘇格拉底在看到擺賣的奢侈物品時(shí),說道:我不需要的東西可真不少?。∈灞救A曾說:“正如一個不需要或只需要很少進(jìn)口物品的國家,才是最幸運(yùn)的國家,同樣,如果一個人內(nèi)在充足、豐富,不需要從自身之外尋求娛樂,那么,這個人就是一個最幸運(yùn)的人。因?yàn)檫M(jìn)口物品使國家花費(fèi)不菲,仰仗他人,同時(shí)又帶來危險(xiǎn)、制造麻煩?!崩献诱f:“五音令人耳聾,五色令人目盲,馳騁田野令人心發(fā)狂?!鼻f子講:“墮肢體,黜聰明,吾喪我。”孔子講“反求諸己”,孟子講“反身而誠”,曾子講“一日三省吾身”,禪宗講“明心現(xiàn)性”,王陽明講“致良知”,脫離了對外物迷亂的追求,才能真正關(guān)照到內(nèi)在的本心。
所以請根據(jù)“接口隔離原則”重構(gòu)一下自己!