討好女朋友的6大技巧
前言
今天碼仔沒(méi)有加班,早早的回到了寬敞且明亮的家里,剛一推開(kāi)門就聽(tīng)到女朋友的聲音:“飯?jiān)阱伬?,我在床上。。?!?rdquo;
叮鈴鈴。。。。
好吧,鬧鐘聲不僅打破了清晨的寧?kù)o也打破了碼仔的美夢(mèng)。。。程序員還想要女朋友?
但是!碼仔心里最不爽的是不僅沒(méi)有女朋友,每天還要跟不同的“對(duì)象”周旋。
程序員的世界里有這么一句話:”萬(wàn)物皆對(duì)象“,我們每天都再跟各種”對(duì)象“打交道,每天用各種方法來(lái)處理“各對(duì)象”之間的關(guān)系。
碼仔就想了,為啥不能把工作中協(xié)調(diào)”對(duì)象“的方法用到自己身上呢?那樣自己是不是也能萬(wàn)花從中過(guò)了?
說(shuō)干就干,上方法!
只對(duì)自己的女朋友負(fù)責(zé) —— 單一責(zé)任鏈
首先在代碼界,單一責(zé)任鏈原則的定義是這樣的:?jiǎn)我宦氊?zé)原則(Single Responsibility Principle, SRP):一個(gè)類只負(fù)責(zé)一個(gè)功能領(lǐng)域中的相應(yīng)職責(zé),或者可以定義為:就一個(gè)類而言,應(yīng)該只有一個(gè)引起它變化的原因。它具有高內(nèi)聚,低耦合的特點(diǎn)。
也就是說(shuō),我們?cè)谠O(shè)計(jì)類的時(shí)候,把實(shí)現(xiàn)某類功能的方法,合并到同一個(gè)類中,讓其只對(duì)單一功能負(fù)責(zé),這樣可以很大程度的減少代碼耦合性。例如:我們封裝了一個(gè)圖片處理類用于處理代碼中所有圖片展示的問(wèn)題,有圓角顯示圖片、圓形截取圖片、模糊圖片等等,到這里都是符合單一責(zé)任的原則,這個(gè)類只對(duì)圖片的顯示處理負(fù)責(zé)。但是如果我們?cè)侔褕D片的下載、刪除等方法封裝進(jìn)來(lái),這樣雖說(shuō)類的功能更多了,但是其需要負(fù)的責(zé)任也多了,后期對(duì)其的維護(hù)和管理更麻煩了。
那這個(gè)原則應(yīng)該如何應(yīng)用到我們談對(duì)象中呢?其實(shí)是一樣的,單一責(zé)任,只對(duì)一個(gè)人負(fù)責(zé)任。我們只需要對(duì)自己的“對(duì)象”負(fù)責(zé)任就行了,別人的“對(duì)象”不需要你來(lái)負(fù)責(zé)任,你要強(qiáng)行對(duì)別人的“對(duì)象”負(fù)責(zé)任,那你大概率會(huì)打翻自己對(duì)象的醋壇子,然后強(qiáng)行搞崩你們之間脆弱的感情。
一諾千金 —— 開(kāi)閉原則
我們先看一下開(kāi)閉原則的定義:開(kāi)閉原則(Open-Closed Principle, OCP):一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。即軟件實(shí)體應(yīng)盡量在不修改原有代碼的情況下進(jìn)行擴(kuò)展。也就是說(shuō),我們?cè)诰S護(hù)和升級(jí)項(xiàng)目的時(shí)候,要盡量不去修改已經(jīng)寫(xiě)好的代碼(除非是Bug)通過(guò)繼承或者別的方式去新增功能。那這個(gè)原則又如何運(yùn)用到我們談對(duì)象當(dāng)中呢?
兩個(gè)人交往,肯定少不了一些保證、承諾什么的,對(duì)于這些東西一定要牢記,切不可修改。不讓會(huì)給人家不守信,不靠譜的感覺(jué),當(dāng)你的女朋友對(duì)你有這種認(rèn)知的時(shí)候,那你們的感情大概率要涼了。
分清范圍 —— 里氏替換
什么是里氏替換原則呢:里氏代換原則(Liskov Substitution Principle, LSP):所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象。就是說(shuō)在軟件中將一個(gè)基類對(duì)象替換成它的子類對(duì)象,程序?qū)⒉粫?huì)產(chǎn)生任何錯(cuò)誤和異常,反過(guò)來(lái)則不成立,如果一個(gè)軟件實(shí)體使用的是一個(gè)子類對(duì)象的話,那么它不一定能夠使用基類對(duì)象。這很顯然是通過(guò)繼承思想抽取的方法。那在生活中我們又怎樣通過(guò)這個(gè)方法好好跟對(duì)象交往呢?
陪對(duì)象一起吃飯也是個(gè)很麻煩的事情,因?yàn)樗傆羞@些那些不吃的東西。有時(shí)候她會(huì)明確指出她不吃什么(蒜啊、菠菜啊)但是有時(shí)候她會(huì)給你一個(gè)范圍:不吃青菜。如果她給你說(shuō)的是不吃菠菜,那么她也許會(huì)吃生菜或者其他青菜,但是如果她告訴你不吃青菜,你如果還是直男思想的給她吃生菜,還說(shuō):“你不是不吃青菜么?這是生菜不是青菜啊!”那你這個(gè)腦子還是不用談戀愛(ài)了。
以不變應(yīng)萬(wàn)變 —— 依賴倒轉(zhuǎn)原則
我們先來(lái)認(rèn)識(shí)一下這個(gè)原則:依賴倒轉(zhuǎn)原則(Dependency Inversion Principle, DIP):抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象。換言之,要針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。依賴倒轉(zhuǎn)原則要求我們?cè)诔绦虼a中傳遞參數(shù)時(shí)或在關(guān)聯(lián)關(guān)系中,盡量引用層次高的抽象層類,即使用接口和抽象類進(jìn)行變量類型聲明、參數(shù)類型聲明、方法返回類型聲明,以及數(shù)據(jù)類型的轉(zhuǎn)換等,而不要用具體類來(lái)做這些事情。而我們?cè)趯?shí)現(xiàn)依賴倒轉(zhuǎn)原則時(shí),通常需要針對(duì)抽象層編程,將具體類的對(duì)象通過(guò)依賴注入(DependencyInjection, DI)的方式注入到其他對(duì)象中,依賴注入是指當(dāng)一個(gè)對(duì)象要與其他對(duì)象發(fā)生依賴關(guān)系時(shí),通過(guò)抽象來(lái)注入所依賴的對(duì)象。常用的注入方式有三種,分別是:構(gòu)造注入,設(shè)值注入(Setter注入)和接口注入。(依賴注入不僅解耦,還方便單元測(cè)試)
戀愛(ài)中給女朋友買東西是很麻煩的一件事,因?yàn)榕硕际巧谱兊?。前一秒她還給你說(shuō)她喜歡這個(gè)顏色的口紅,下一秒可能就變成了另一個(gè)顏色的包包。所以戀愛(ài)的時(shí)候與其猜來(lái)猜去,不如一步到位,直接給錢,以不變應(yīng)萬(wàn)變,想買什么買什么,方便還省事。(哎!可憐的碼仔,為了性福生活只能不斷搬磚了)
對(duì)癥下藥——接口隔離原則
這個(gè)原則的定義是這樣的:接口隔離原則(Interface Segregation Principle, ISP):使用多個(gè)專門的接口,而不使用單一的總接口,即客戶端不應(yīng)該依賴那些它不需要的接口。
接口隔離原則與單一職責(zé)原則都是對(duì)接口設(shè)計(jì)的規(guī)范。不過(guò),單一職責(zé)原則強(qiáng)調(diào)的是職責(zé)的單一,即業(yè)務(wù)劃分上的單一;接口隔離原則強(qiáng)調(diào)的是具體實(shí)現(xiàn)時(shí),接口的規(guī)模不能過(guò)大。比如,一個(gè)接口的設(shè)計(jì)符合單一職責(zé)原則,只包含一個(gè)職責(zé)的定義,但是實(shí)現(xiàn)這個(gè)職責(zé)需要較多的函數(shù)或方法,而并不是所有的模塊使用此接口時(shí)都會(huì)用到所有的方法,那么這個(gè)接口的設(shè)計(jì)就不符合接口隔離原則。
不僅在編程中需要接口隔離,談對(duì)象同樣也需要 。廣大男同胞肯定都有一個(gè)通病:對(duì)象給你說(shuō)不舒服,你回復(fù)“多喝熱水”;對(duì)象給你說(shuō)感冒了,你回復(fù)“多喝熱水”;對(duì)象給你說(shuō)無(wú)聊了,你回復(fù)“多喝熱水" …… 熱水治百病。這樣我肯定你活不過(guò)三秒。什么藥治什么病,對(duì)癥下藥才是王道。
不要到處沾花惹草——迪米特法則
最后一個(gè)原則,迪米特法則(Law of Demeter, LoD):一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用。迪米特法則還有幾種定義形式,包括:不要和“陌生人”說(shuō)話、只與你的直接朋友通信等,在迪米特法則中,對(duì)于一個(gè)對(duì)象,其朋友包括以下幾類:
(1)當(dāng)前對(duì)象本身(this);(2)以參數(shù)形式傳入到當(dāng)前對(duì)象方法中的對(duì)象;(3)當(dāng)前對(duì)象的成員對(duì)象;(4)如果當(dāng)前對(duì)象的成員對(duì)象是一個(gè)集合,那么集合中的元素也都是朋友;(5)當(dāng)前對(duì)象所創(chuàng)建的對(duì)象。
任何一個(gè)對(duì)象,如果滿足上面的條件之一,就是當(dāng)前對(duì)象的“朋友”,否則就是“陌生人”。在應(yīng)用迪米特法則時(shí),一個(gè)對(duì)象只能與直接朋友發(fā)生交互,不要與“陌生人”發(fā)生直接交互,這樣做可以降低系統(tǒng)的耦合度,一個(gè)對(duì)象的改變不會(huì)給太多其他對(duì)象帶來(lái)影響。
”不要和陌生人說(shuō)話“,都有對(duì)象了還出去沾花惹草肯定是不行的了,畢竟兩人戀愛(ài)要相互坦誠(chéng)。只有一心一意想著對(duì)方,兩人的感情才能長(zhǎng)長(zhǎng)久久。
總結(jié)
以上便是面向“對(duì)象”的六大原則。熟練掌握這六大原則不僅能讓我們?cè)谖镔|(zhì)層面更好的滿足“對(duì)象”(代碼都寫(xiě)好了,鈔票還遠(yuǎn)嗎?),還能讓“對(duì)象”在精神層面滿足自己(對(duì)象都哄開(kāi)心了,你離開(kāi)心還遠(yuǎn)嗎?)。所以無(wú)論是為了我們的幸福生活,還是為了我們的性福生活,我們都有必要學(xué)習(xí)好面向?qū)ο蟆<佑桶?騷年






