千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  應(yīng)聘面試  >  Java面試題  > Java開(kāi)發(fā)面試題詳解:舉例說(shuō)明什么是IoC

Java開(kāi)發(fā)面試題詳解:舉例說(shuō)明什么是IoC

來(lái)源:千鋒教育
發(fā)布人:千鋒老師
時(shí)間: 2018-12-28 13:38:00 1545975480

  IoC就是Inversion of Control,控制反轉(zhuǎn)。在Java開(kāi)發(fā)中,IoC意味著將你設(shè)計(jì)好的類(lèi)交給系統(tǒng)去控制,而不是在你的類(lèi)內(nèi)部控制。這稱(chēng)為控制反轉(zhuǎn)。

  下面我們以幾個(gè)例子來(lái)說(shuō)明什么是IoC。假設(shè)我們要設(shè)計(jì)一個(gè)Girl和一個(gè)Boy類(lèi),其中Girl有kiss方法,即Girl想要Kiss一個(gè)Boy。那么,我們的問(wèn)題是,Girl如何能夠認(rèn)識(shí)這個(gè)Boy?

圖片1

  在我們中國(guó),常見(jiàn)的MM與GG的認(rèn)識(shí)方式有以下幾種:1青梅竹馬;2親友介紹;3父母包辦。 那么哪一種才是更好呢?

  青梅竹馬:Girl從小就知道自己的Boy。

圖片2

  public class Girl ...{

  void kiss()...{

  Boy boy = new Boy();

  }

  }

  然而從開(kāi)始就創(chuàng)建的Boy缺點(diǎn)就是無(wú)法在更換。并且要負(fù)責(zé)Boy的整個(gè)生命周期。如果我們的Girl想要換一個(gè)怎么辦?(筆者嚴(yán)重不支持Girl經(jīng)常更換Boy) 親友介紹:由中間人負(fù)責(zé)提供Boy來(lái)見(jiàn)面。

圖片3

  public class Girl ...{

  void kiss()...{

  Boy boy = BoyFactory.createBoy();

  }

  }

  親友介紹,固然是好。如果不滿(mǎn)意,盡管另外換一個(gè)好了。但是,親友BoyFactory經(jīng)常是以Singleton的形式出現(xiàn),不然就是,存在于Globals,無(wú)處不在,無(wú)處不能。實(shí)在是太繁瑣了一點(diǎn),不夠靈活。我為什么一定要這個(gè)親友摻和進(jìn)來(lái)呢?為什么一定要付給她介紹費(fèi)呢?萬(wàn)一我的好朋友愛(ài)上了我的男朋友呢?

  父母包辦:一切交給父母,自己不用費(fèi)吹灰之力,只需要等著Kiss就好了。

  public class Girl ...{

  void kiss(Boy boy)...{

  // kiss boy

  boy.kiss();

  }

  }

  Well,這是對(duì)Girl非常好的方法,只要想辦法賄賂了Girl的父母,并把Boy交給他。那么我們就可以輕松的和Girl來(lái)Kiss了??磥?lái)幾千年傳統(tǒng)的父母之命還真是有用哦。至少Boy和Girl不用自己瞎忙乎了。

  這就是IOC,將對(duì)象的創(chuàng)建和獲取提取到外部。由外部容器提供需要的組件。

  我們知道好萊塢原則:“Do not call us, we will call you.” 意思就是,You, girlie, do not call the boy. We will feed you a boy。

  我們還應(yīng)該知道依賴(lài)倒轉(zhuǎn)原則即 Dependence Inversion Princinple,DIP。Eric Gamma說(shuō),要面向抽象編程。面向接口編程是面向?qū)ο蟮暮诵摹?/p>

圖片4

  組件應(yīng)該分為兩部分,即Service, 所提供功能的聲明Implementation, Service的實(shí)現(xiàn)好處是:多實(shí)現(xiàn)可以任意切換,防止 “everything depends on everything” 問(wèn)題.即具體依賴(lài)于具體。

  所以,我們的Boy應(yīng)該是實(shí)現(xiàn)Kissable接口。這樣一旦Girl不想kiss可惡的Boy的話(huà),還可以kiss可愛(ài)的kitten和慈祥的grandmother。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
面向?qū)ο缶幊痰奶卣魇鞘裁?請(qǐng)解釋每個(gè)特征

答案:面向?qū)ο缶幊痰奶卣靼ǎ悍庋b(Encapsulation):封裝是將相關(guān)的數(shù)據(jù)和方法組合在一起形成類(lèi)的機(jī)制。它可以隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只暴露必要的...詳情>>

2023-07-18 13:56:00
容器是什么?如何理解容器

  容器(Container)是一個(gè)廣泛的概念,指的是一種可以容納其他元素或?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)或抽象概念。在計(jì)算機(jī)科學(xué)中,容器的概念經(jīng)常出現(xiàn)在數(shù)據(jù)結(jié)...詳情>>

2023-05-08 13:41:00
快速通道