一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

OO真經(jīng)——關(guān)于面向?qū)ο蟮恼軐W(xué)體系及科學(xué)體系的探討(中)

真經(jīng)第六章——運(yùn)作 Moving

      “運(yùn)動(dòng)是絕對(duì)的——牛頓”

6.1、導(dǎo)言

      在前五章中,我們從世界觀的這話題開始,逐步引出了抽象、層次、繼承和耦合。這些內(nèi)容,形成了對(duì)象論中關(guān)于世界的結(jié)構(gòu)體系。
      然而,要想真正描述一個(gè)世界,僅有結(jié)構(gòu)式不行的。開始我們說過,世界觀主要關(guān)注兩個(gè)方面:一是世界是什么樣子的(結(jié)構(gòu)),另一個(gè)就是世界時(shí)如何演進(jìn)的(運(yùn)作)。現(xiàn)在,我們來討論對(duì)象論中關(guān)于世界運(yùn)作的理論。
      這里首先要指出一點(diǎn),“對(duì)象論”是關(guān)于程序世界(即將一個(gè)軟件系統(tǒng)看成一個(gè)世界)的世界觀,而非關(guān)于現(xiàn)實(shí)世界的,所以,將對(duì)象論應(yīng)用于現(xiàn)實(shí)世界時(shí),往往會(huì)有所偏頗。其實(shí)前面的某些地方已經(jīng)體現(xiàn)出這一點(diǎn),而在運(yùn)作理論這里,會(huì)體現(xiàn)的尤其明顯。但是為了直觀起見,我依然會(huì)將對(duì)象論應(yīng)用于現(xiàn)實(shí)世界去舉例子,當(dāng)然我會(huì)非常謹(jǐn)慎和小心,并且會(huì)明確指出對(duì)象論應(yīng)用于現(xiàn)實(shí)世界的偏頗在哪里。

6.2、世界本沒有類

      對(duì)象論認(rèn)為:世界的演進(jìn),是而且只是各種對(duì)象通過互相調(diào)用其他對(duì)象的公開服務(wù)而完成交互。

      注意,是對(duì)象交互,而不是類交互!沒錯(cuò),類之間是永遠(yuǎn)不可能交互的。因?yàn)椴徽撌乾F(xiàn)實(shí)世界還是程序世界,從來不存在具體的類。類只是抽象思維作用于對(duì)象的產(chǎn)物,它幫助我們理解、記憶、分析和設(shè)計(jì)。類是抽象的概念,它“客觀”存在,但不是“具體”的存在。
      例如,現(xiàn)實(shí)世界中,我們可以找出很多個(gè)“具體的蘋果”對(duì)象,但是你能找出一個(gè)東西,說它是“蘋果”這個(gè)類嗎?你這一輩子吃的每一個(gè)蘋果,都是一個(gè)具體的蘋果對(duì)象,從來沒有具體的“蘋果類”和你交互過。再上升一點(diǎn),你一生交互過的所有東西,都是對(duì)象,而沒有一個(gè)具體的類。“類”不過是你的抽象思維作用于對(duì)象形成的幫助你理解認(rèn)識(shí)世界的抽象概念罷了。“類們”從不曾和你真正交互。
      程序世界中也是一樣,程序運(yùn)行起來,從來都是具體對(duì)象之間的交互,類只是幫助你分析設(shè)計(jì)的概念工具罷了。
      認(rèn)識(shí)到上面幾點(diǎn)對(duì)于理解對(duì)象論的世界運(yùn)行理論非常重要,時(shí)刻銘記,參與真正世界運(yùn)行的,只有對(duì)象,沒有類!對(duì)象在世界中,類在我們心中!
      這一小節(jié)的標(biāo)題是“世界本沒有類”,代表兩個(gè)意思:一是世界“本來”沒有類,二是世界“本質(zhì)”沒有類。
      你可能會(huì)問,在第五章“耦合”中,不是說依賴關(guān)系是“兩個(gè)類因?yàn)榭赡芙换ザa(chǎn)生的關(guān)系”嗎?其實(shí),確切點(diǎn)說,應(yīng)該是“兩個(gè)類所能映射到的對(duì)象因?yàn)榭赡芙换ザa(chǎn)生的關(guān)系”,本質(zhì)上,依賴本來是對(duì)象間的依賴,只不過在抽象時(shí)被同時(shí)抽象到類里面了。

6.3、程序世界——大同的和諧世界

      雖然在對(duì)象論里,現(xiàn)實(shí)世界和抽象世界的基本運(yùn)作機(jī)理是一樣的,但程序世界和現(xiàn)實(shí)世界在具體運(yùn)作上有很大差別。首先,我要告訴你,程序世界時(shí)多么的大同和和諧!

      程序世界與現(xiàn)實(shí)世界第一點(diǎn)區(qū)別:現(xiàn)實(shí)世界的依賴以對(duì)象為單位,程序世界的依賴以類為單位。

      沒明白這意味著什么?
      舉個(gè)例子,在現(xiàn)實(shí)世界中,是不是關(guān)系很重要啊。為什么?因?yàn)槟阏J(rèn)識(shí)的人多,可依賴的人就多。例如你生病了,如果你有個(gè)醫(yī)生朋友,看病就方便很多;如果你要打官司,而你又恰巧認(rèn)識(shí)律師朋友,是不是很爽呢;如果你想上清華大學(xué),剛好清華大學(xué)校長(zhǎng)是你親戚,那一切就好辦多了是吧。
      為什么會(huì)這樣?究其本質(zhì),是因?yàn)?strong>現(xiàn)實(shí)世界中對(duì)象間的依賴是以對(duì)象為單位的,這種依賴關(guān)系不會(huì)隨著泛化過程而被泛化到類里面去。例如,有一個(gè)人現(xiàn)在在北京航空航天大學(xué)上學(xué),從這“一個(gè)人可”以泛化出“人”這個(gè)類,而北航可以泛化出“大學(xué)”這個(gè)類,但這個(gè)具體的人和北航的這種關(guān)系可沒有被泛化到兩個(gè)類中,也就是說,并不是每一個(gè)“人對(duì)象”都可以去任何一個(gè)“大學(xué)對(duì)象”去上學(xué)的。
      不過,如果是程序世界里,上面的推理是可行的,因?yàn)?strong>程序世界中對(duì)象間的依賴是以類為單位的,這種依賴關(guān)系會(huì)隨著泛化過程而被泛化到類里面去。并且,只要兩個(gè)類建立了依賴,那么兩個(gè)類之間的所有對(duì)象都兩兩依賴了。換句話說,在程序世界里,只要有一個(gè)“人”和一個(gè)“大學(xué)”發(fā)生了聯(lián)系,那么這種聯(lián)系就被泛化到類中了,隨后,所有的“人”都可以上“任何”的大學(xué)。

6.1

圖6.1、兩個(gè)世界中依賴的區(qū)別

      看圖6.1,假設(shè)世界上只有三個(gè)人和三所大學(xué)。在現(xiàn)實(shí)世界中,小龍女考上了清華,不過這和其他人其他大學(xué)一點(diǎn)關(guān)系也沒有,這種關(guān)系并沒有體現(xiàn)在類上,看,兩個(gè)類沒有任何聯(lián)系。但在程序世界中,小龍女考上了清華,一下子人和大學(xué)兩個(gè)類就關(guān)聯(lián)起來了,接著,張無(wú)忌和郭靖這兩個(gè)不好好學(xué)習(xí)的學(xué)生也沾了光,和三所大學(xué)都聯(lián)系起來了。(提示:其實(shí)這里和第四章講到的OCP和LSP聯(lián)系非常緊密,讀者可以聯(lián)系OCP和LSP兩個(gè)原則自己思考一下為什么程序世界會(huì)這樣。)
      你知道了吧,在程序世界里,全世界的醫(yī)生隨你看,律師隨你用,大學(xué)隨你上,美食隨你吃!多么和諧大同的美好世界!

      看了上面對(duì)程序世界的描述,你是不是已經(jīng)垂涎三尺了?恨不得自己變成一段代碼,跑到程序世界里。不過別著急,事情也許沒有你想象的那么美好。下面我們來看另一個(gè)程序世界與現(xiàn)實(shí)世界的區(qū)別。 6.4、程序世界——封建的專制世界

      上文描述了程序世界是多么多么美好,不過如果有一天,你真的跑到里面去了,你可就慘了。不信看下面。話說你一進(jìn)程序世界,就迫不及待想在程序世界里找個(gè)漂亮的女朋友,可以嗎?對(duì)不起,不成!你想吃法國(guó)大餐,對(duì)不起,不成!你想上最好的大學(xué),對(duì)不起,不成!……搞什么!不是說程序世界什么都可以得到嗎。沒錯(cuò),除了選擇權(quán)!

      程序世界里的對(duì)象沒有選擇權(quán)。

      為什么會(huì)這樣?因?yàn)槿绻麑?duì)象有選擇權(quán),就沒法貫徹OCP了!你要是活在程序世界里,不但給你包辦婚姻,連吃飯、上學(xué)……一切的一切,你都得服從包辦,對(duì)象一點(diǎn)點(diǎn)選擇權(quán)也沒有。至于誰(shuí)給你包辦的,那是后話。
      看了這些,你還敢去程序世界嗎?不過這還不是最恐怖的,告訴你更恐怖的一點(diǎn):

      程序世界里的對(duì)象不認(rèn)識(shí)對(duì)象。

      沒錯(cuò),良好的面向?qū)ο筇岢珜?duì)象不認(rèn)識(shí)對(duì)象!很不可思議?其實(shí),這就是所謂的“低耦合”,我們喊了那么多年的“低耦合”,到底什么是低耦合?所謂低耦合,就是先剝奪對(duì)象的選擇權(quán),再剝奪對(duì)象的感覺。對(duì)象間誰(shuí)也不認(rèn)識(shí)誰(shuí),只知道對(duì)象能提供什么服務(wù)。
      我們現(xiàn)在了解了程序世界是什么樣子了,下面,我們討論程序世界為什么要這樣。

6.5、有奶就是娘

      中國(guó)有句俗語(yǔ),叫“有奶就是娘”,往往用來諷刺那種六親不認(rèn),兩面三刀,誰(shuí)給好處就跟誰(shuí)的無(wú)恥小人。不過,面向?qū)ο罂墒欠浅L岢?ldquo;有奶就是娘”的行為。如果我們的程序都能做到“有奶就是娘”的地步,那就真是實(shí)現(xiàn)了“低耦合”這一教義了,套用梁朝偉的話,在程序世界里,有奶就是娘的行為“是美德”。

      要理解上述道理,我們要先拋卻我們腦中的道德、廉恥等概念,從本質(zhì)上看看“有奶就是娘”體現(xiàn)了什么哲學(xué)道理。
     “有奶就是娘”,純從字面解釋,是說任何一個(gè)人,只要能給奶喝,就當(dāng)做自己親娘。上升到哲學(xué)層面,是說這么一個(gè)意思:不以其他對(duì)象實(shí)體本身為交互準(zhǔn)則,而以其他對(duì)象的行為作為交互準(zhǔn)則,與一個(gè)對(duì)象是否進(jìn)行交互純粹是從其行為判斷,而不對(duì)對(duì)象本體有任何概念。
      這種處事哲學(xué),在現(xiàn)實(shí)生活中是最被人鄙夷的,但在程序世界里確是最提倡的。如果一個(gè)程序世界里,所有對(duì)象都能以“有奶就是娘”的哲學(xué)去處事,那么,這就是一個(gè)最美好運(yùn)作方式。

6.6、接口橫空出世

      上文說到,程序世界中提倡的運(yùn)作方式是“有奶就是娘”的方式,但要真正實(shí)現(xiàn)這種方式,似乎還少點(diǎn)東西。我們回顧一下,世界本來只有對(duì)象,我們從對(duì)象中抽象出了類,這就是目前我們眼中的世界。這樣,我們的交互,要么以對(duì)象為準(zhǔn)則,要么以類為準(zhǔn)則。
      以對(duì)象為準(zhǔn)則,顯然是不行的,因?yàn)槲覀冋f了,對(duì)象間根本互不認(rèn)識(shí)。以類為準(zhǔn)則,理論上可行,但這樣有問題,就是類本身是對(duì)象“實(shí)體的抽象”,是為了更好記憶、描述和認(rèn)識(shí)世界而創(chuàng)建的對(duì)象,歸根到底,還是“實(shí)體”范疇的概念,所以在哲學(xué)上還是和“以行為作為交互準(zhǔn)則”向左。

      認(rèn)識(shí)到以上困難,就能認(rèn)識(shí)到,目前我們的世界還無(wú)法實(shí)現(xiàn)以行為為交互準(zhǔn)則,于是,我們需要為世界再衍生一些內(nèi)容。第二章說過,世界本身只有對(duì)象,而衍生其他概念的基本方法是抽象。所以,這里我們當(dāng)然要用抽象衍生一些概念出來。進(jìn)一步,類是對(duì)象“實(shí)體”的抽象,而我們需要的是以行為為交互準(zhǔn)則,很自然的,我們完全可以創(chuàng)建一種新概念,這種概念是行為的抽象,這種新概念,就是接口(Interface)。

      接口(Interface):對(duì)象行為的抽象。

      這里要說明,接口和類雖然都是從對(duì)象上通過抽象衍生出的概念,但兩者本質(zhì)不同,是從對(duì)象的兩個(gè)不同的哲學(xué)角度和動(dòng)機(jī),抽象出的不同概念,并形成世界兩個(gè)完全不同的方面(ASPect)。至于兩者具體有什么區(qū)別,下一小節(jié)詳細(xì)討論。

6.7、接口 vs 抽象類

      經(jīng)常有朋友迷惑一件事情,抽象類和接口有什么區(qū)別?何時(shí)使用抽象類,何時(shí)使用接口?但從功能來講,抽象類完全可以代替接口,那為什么還要有接口呢?這一小節(jié)來分析這些問題。

      這里附帶說一個(gè)問題,產(chǎn)生這種疑惑的原因,大多是因?yàn)榕笥褌円呀?jīng)習(xí)慣了學(xué)習(xí)一個(gè)東西時(shí),只看其什么樣子?怎么用?而不習(xí)慣于弄清楚一個(gè)東西起源于哪?出現(xiàn)的動(dòng)機(jī)是什么?其實(shí),要想學(xué)好、用好任何一個(gè)東西,后兩個(gè)問題更關(guān)鍵一些。
      舉個(gè)例子,有人發(fā)明了吹風(fēng)機(jī),我們?nèi)绻桓闱宄涫鞘裁礃幼?mdash;—“有個(gè)把手,有個(gè)吹風(fēng)筒”,以及怎么用——“打開按鈕能吹出熱風(fēng),關(guān)閉按鈕就停止了”。如果我們只搞清楚這些,那么我們八成用不對(duì)這個(gè)東西,為什么?因?yàn)槲覀兏静恢肋@東西是怎么來的,它為什么要被發(fā)明出來。也許我們天天拿他吹臉取暖或吹衣服,還一派洋洋得意以為用的很好的樣子。殊不知這東西其實(shí)是用來吹頭發(fā)幫助頭發(fā)快點(diǎn)干起來的。
      不要笑,這種事經(jīng)常發(fā)生在我們身上。因?yàn)樵谲浖_發(fā)中,有太多的東西,我們只顧著學(xué)習(xí)其是什么樣子,怎么個(gè)用法,也許就像吹風(fēng)機(jī)一樣,這些并不復(fù)雜,然后我們就把它用到不該用的地方,還以為自己用得很好。
      用不用得好吹風(fēng)機(jī),不在于是否熟練掌握開開關(guān)關(guān),而在于是不是用它吹頭發(fā)。同理,任何東西用得好不好,不在于是不是熟練掌握用法,而在于是不是用對(duì)了地方。而要想用對(duì)地方,就要弄清楚這個(gè)東西的“怎么出來的”和“出來是做什么用的”。

      說了挺多,我們回到接口和抽象類的話題上來。
      首先要說明一點(diǎn),“抽象類(Abstract Class)”和“類(Class)”在哲學(xué)意義上沒什么區(qū)別,其區(qū)別僅僅是實(shí)現(xiàn)層面上的,即抽象類只不過是一種特殊的類,編程環(huán)境強(qiáng)制不準(zhǔn)這種類生成實(shí)例,哲學(xué)意義上兩者沒有任何區(qū)別。所以,從哲學(xué)層面討論“抽象類與接口對(duì)比”和討論“類與接口對(duì)比”是等價(jià)的。

      類與接口的不同點(diǎn)有以下幾點(diǎn):
      I. 抽象范疇不同。類是對(duì)象“體征”的抽象,接口是對(duì)象行為的抽象。
      II. 抽象動(dòng)機(jī)不同。抽象出類是為了幫助記憶、認(rèn)識(shí)世界,抽象出接口是為了實(shí)現(xiàn)低耦合交互。
      III. 關(guān)注不同。類關(guān)注共同的體征,接口關(guān)注用來交互的行為。
      IV. 存在范疇不同。類存在于抽象層次樹上,接口存在于接口網(wǎng)。
      V. 應(yīng)用范疇不同。類應(yīng)用于結(jié)構(gòu)范疇,是靜態(tài)概念,接口應(yīng)用于運(yùn)作范疇,是動(dòng)態(tài)概念。

      上面的條目有點(diǎn)學(xué)術(shù)了,通俗說來,類是從對(duì)象實(shí)體的的體征范疇上抽象出來的,用來幫助我們記憶、分析世界不同的對(duì)象,主要表明對(duì)象“什么樣子”;而接口是從對(duì)象交互時(shí)需要的行為中抽象出來的,關(guān)注對(duì)象交互時(shí)需要的行為。
      還是舉個(gè)例子吧。
      例如,有一群具體的司機(jī)和好多輛具體的汽車,我們可以從司機(jī)中抽象出“司機(jī)”這個(gè)類,從汽車抽象出“汽車”這個(gè)類,這種抽象是“體征范疇”的,抽象的目的僅僅是幫助記憶、認(rèn)識(shí),完全和交互沒有關(guān)系。而當(dāng)考慮到交互——司機(jī)需要駕駛汽車,于是抽象出一個(gè)“可駕駛”這個(gè)接口。注意,一但“可駕駛”這個(gè)接口被抽象出來,就完全和司機(jī)以及汽車沒有關(guān)系了,除了汽車,拖拉機(jī)、輪船、飛機(jī)都可以實(shí)現(xiàn)這個(gè)接口,而不一定是司機(jī),會(huì)開車的任何人都可以通過“可駕駛”這個(gè)接口去駕駛?cè)魏螌?shí)現(xiàn)“可駕駛”接口的東西。這樣一來,“駕駛”這種交互就完全取決于這個(gè)接口了,這就是“以行為為交互準(zhǔn)則的意思”。

      如果明白了這一小節(jié)的內(nèi)容,相信大家再也不會(huì)被“接口和類有什么區(qū)別?”、“何時(shí)使用抽象類,何時(shí)使用接口?”這樣的問題迷惑了,而可以揮灑自如的在系統(tǒng)中正確使用接口和類。一個(gè)方法:拿不準(zhǔn)的時(shí)候問問自己,這個(gè)抽象是體征抽象還是行為抽象?是為了記憶、分析、設(shè)計(jì)還是為了交互需要?想明白,再下手。 6.8、依賴是如何被倒置的

      弄清楚了接口,下面可以談一個(gè)有名的OO原則了:依賴倒置原則(DIP)。
      如上,我們先不說DIP是什么,而是搞清楚DIP的來龍去脈。到時(shí),朋友們自然對(duì)DIP就有深刻理解了。我們開始!
      首先,我們要說明,依賴是有方向的,客戶類依賴于服務(wù)類。什么是客戶類?如果A類需要B類提供的服務(wù),那么A類就依賴B類,反之不成立。在沒有引入接口前,客戶類“知道”服務(wù)類,而服務(wù)類“不知道”客戶類,就像下面這個(gè)樣子。

6.2

圖6.2、沒有接口的依賴

      我們看到,司機(jī)作為客戶類,汽車作為服務(wù)類。依賴的方向是從司機(jī)到汽車,以為這里司機(jī)要使用汽車提供的“駕駛”方法操作汽車。這是我們不推薦的方式,因?yàn)椴粔?ldquo;松耦合”。于是,我們將駕駛抽象成接口,依賴變成如下形式。

6.3

圖6.3、引入接口后的依賴

      如圖6.3所示,我們從這種交互關(guān)系中,抽象出了“可駕駛”這個(gè)接口。注意,此時(shí)兩者誰(shuí)也不依賴誰(shuí),或說誰(shuí)也不知道誰(shuí)了。那么為什么司機(jī)可以放心呢?因?yàn)樗揽神{駛接口的存在,他要駕駛的東西一定實(shí)現(xiàn)了這個(gè)接口,甭管是什么,只要實(shí)現(xiàn)了這個(gè)接口,我就能駕駛。其實(shí)這里才體現(xiàn)出接口的哲學(xué)意義。

      接口的哲學(xué)意義:對(duì)客戶類的保證,對(duì)服務(wù)類的約束。

      正是接口約束了服務(wù)類必須實(shí)現(xiàn)什么功能,客戶類才可以在不知道具體服務(wù)類的情況下“放心”進(jìn)行交互,因?yàn)榻涌趯?duì)客戶類提供了一種保證。希望各位能好好體會(huì)接口的這種哲學(xué)意義,這對(duì)于對(duì)象論的良好運(yùn)行體質(zhì)的理解非常重要。
      可是,這樣還不夠,我們還有一個(gè)非常重要的問題沒有討論:誰(shuí)有權(quán)利定義接口?或者說服務(wù)類和客戶類誰(shuí)擁有接口?當(dāng)然,理論上時(shí)誰(shuí)擁有都可以,但卻會(huì)對(duì)世界的運(yùn)作產(chǎn)生巨大影響。我們先看服務(wù)類擁有接口的情形。

6.4

圖6.4、服務(wù)類擁有接口

      如圖6.4,由于服務(wù)類擁有制定接口的權(quán)利,所以各個(gè)服務(wù)類都定義了自己的接口,一般情況下他們的接口是不相容的。如圖,司機(jī)可以駕駛汽車,但由于輪船、飛機(jī)各自有自己的可駕駛接口,所以會(huì)開汽車未必會(huì)開飛機(jī)和輪船,如果要開飛機(jī)或輪船還要一個(gè)個(gè)學(xué),現(xiàn)實(shí)世界中就是這樣一種情況。所以,這種世界的運(yùn)行其實(shí)接口幾乎沒有起到作用,由于服務(wù)類是“大爺”,所以它們可以指定諸多霸王條款,而客戶必須忍氣吞聲去遷就,所以,實(shí)際的依賴方向還是從客戶類到服務(wù)類。
      下面在看看客戶類擁有接口會(huì)是什么樣子。

6.5

圖6.5、客戶類擁有接口

      看上圖,客戶終于翻身做主人了,現(xiàn)在客戶擁有定義接口的權(quán)利,服務(wù)類必須無(wú)條件實(shí)現(xiàn),這下好了,只要會(huì)開汽車,就會(huì)開輪船和飛機(jī),因?yàn)榭蛻粲袡?quán)利定義一個(gè)統(tǒng)一的接口,服務(wù)類必須無(wú)條件實(shí)現(xiàn)!這樣,三種交通工具的駕駛方法必須完全一致(雖然現(xiàn)實(shí)世界還沒有這樣),這回客戶終于可以揚(yáng)眉吐氣,體會(huì)一把“顧客是上帝”的感覺了。
      在圖6.5的情況下,司機(jī)可以有權(quán)定義接口,他不必“知道”服務(wù)類,而服務(wù)類必須“知道”客戶定義了什么接口,你有沒有發(fā)現(xiàn),依賴的方向已經(jīng)悄悄倒置過來了!變成服務(wù)類依賴客戶類了(誰(shuí)知道誰(shuí),誰(shuí)就依賴誰(shuí))!這就是“依賴倒置”的由來。不必說,所謂依賴倒置原則就是讓我們必須按圖6.5的方式運(yùn)行世界,而不能按圖6.2,6.3,6.4的方式。下面正式定義依賴倒置原則。

      依賴倒置原則(DIP):客戶類和服務(wù)類都應(yīng)該依賴于抽象(接口),并且客戶類擁有接口。

      我想,看過上述來龍去脈,已經(jīng)不用我再去解釋這個(gè)原則了吧。

6.9、神秘的統(tǒng)治者

      到目前為止,我們基本已經(jīng)搞清楚了對(duì)象世界的運(yùn)行機(jī)制。但仍有一個(gè)疑問:我們?cè)?jīng)說過,程序世界里對(duì)象時(shí)沒有選擇權(quán)的,甚至不知道誰(shuí)是誰(shuí),只知道接口,那么,誰(shuí)來指定服務(wù)類呢?
      例如,上述司機(jī)可以制定接口,所以汽車、飛機(jī)、輪船等可駕駛的東西都要實(shí)現(xiàn),于是司機(jī)可以按照自己制定的方式駕駛東西。但是,司機(jī)不能選擇駕駛什么啊,他根本不知道自己駕駛的是什么,那么,誰(shuí)制定他是駕駛飛機(jī)、汽車還是輪船呢?
      似乎冥冥中,這個(gè)世界存在一個(gè)統(tǒng)治者,它掌管所有對(duì)象之間誰(shuí)和誰(shuí)交互(只要不違反接口),否則,世界根本沒法正常運(yùn)行。沒錯(cuò),程序世界是有這么一個(gè)統(tǒng)治者,他就是大名鼎鼎的“依賴注入容器(DI)”,也有人叫做“控制反轉(zhuǎn)容器(IoC)”。
      什么叫依賴注入?什么叫控制反轉(zhuǎn)?如果你看了上面的文章,那太好理解了,依賴注入就是容器挑選符合接口的服務(wù)類為客戶類提供服務(wù)。例如,上面司機(jī)要一個(gè)可駕駛的東西,容器就會(huì)根據(jù)既定規(guī)則選擇一個(gè),可能是飛機(jī)、可能是汽車、也可能是輪船,交給司機(jī)。司機(jī)駕駛就行了,不用管是什么,反正知道這東西肯定實(shí)現(xiàn)了“可駕駛”接口。

      讓我們向這個(gè)偉大的統(tǒng)治者致敬吧,沒有他,程序世界可真玩不轉(zhuǎn)了(當(dāng)然,如果某個(gè)程序世界不符合DIP甚至沒接口,都是類之間依賴,那么就不需要依賴注入容器了,不過這么一來,可就是“高耦合”了,是OO所反對(duì)的)。

6.10、運(yùn)作起來吧

      到了這里,根本不用我廢話說程序世界時(shí)怎么運(yùn)作的了,因?yàn)樯厦娑家呀?jīng)說明白了。不過,我還是用短短幾句話總結(jié)一下吧。

      一個(gè)符合OO原則的、低耦合的程序世界的運(yùn)作形式是這樣的:首先參與運(yùn)作的本質(zhì)只有對(duì)象,對(duì)象不直接依賴,沒有選擇權(quán),互相不知道,而只知道各個(gè)接口。客戶類制定接口,對(duì)象間通過接口交互,形成運(yùn)作。世界的統(tǒng)治者依賴注入容器決定選擇哪個(gè)服務(wù)類給客戶類使用。

      好了,關(guān)于程序世界的運(yùn)作哲理就講到這里了,大家可以在腦子里描繪一下上述運(yùn)作情景,加深印象。

it知識(shí)庫(kù)OO真經(jīng)——關(guān)于面向?qū)ο蟮恼軐W(xué)體系及科學(xué)體系的探討(中),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久小视频 | 男女免费视频网站 | 狠狠色香婷婷久久亚洲精品 | 国产欧美一区二区三区在线看 | 激情图片小说网 | 国产成人影院一区二区 | 精品区 | 日本亚洲精品色婷婷在线影院 | 免费无遮挡毛片 | 欧美视频福利 | 九色91在线 | 看全大色黄大色黄大片一级爽 | 在线播放人成午夜免费视频 | 久艾草国产成人综合在线视频 | 国产成人精品亚洲2020 | 国产区成人综合色在线 | www欧美在线观看 | 成人97 | 天天干在线影院 | 精品久久久久久中文字幕 | 国产精品100页 | 性欧美午夜高清在线观看 | 亚洲成a人片77777kkkk | 小黄网站有哪些在线观看 | 一本色道久久综合狠狠躁 | 色吊丝网站 | 国产成人综合亚洲欧洲色就色 | 国模私拍福利一区二区 | 一本伊人| 热久久久久久 | 成人精品在线视频 | 国产视频一区二区 | 国产精品一区二区综合 | 日本一道本中文字幕 | 起碰免费视频97网站 | 色网站免费视频 | 四虎免费看 | 成人春色在线观看免费网站 | 国产精品女在线观看 | 色鬼综合网 | 国产男女爱视频在线观看 |