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

手機站
千鋒教育

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

千鋒教育

掃一掃進入千鋒手機站

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

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

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

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

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

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

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

圖片1

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

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

圖片2

  public class Girl ...{

  void kiss()...{

  Boy boy = new Boy();

  }

  }

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

圖片3

  public class Girl ...{

  void kiss()...{

  Boy boy = BoyFactory.createBoy();

  }

  }

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

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

  public class Girl ...{

  void kiss(Boy boy)...{

  // kiss boy

  boy.kiss();

  }

  }

  Well,這是對Girl非常好的方法,只要想辦法賄賂了Girl的父母,并把Boy交給他。那么我們就可以輕松的和Girl來Kiss了??磥韼浊陚鹘y(tǒng)的父母之命還真是有用哦。至少Boy和Girl不用自己瞎忙乎了。

  這就是IOC,將對象的創(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)該知道依賴倒轉(zhuǎn)原則即 Dependence Inversion Princinple,DIP。Eric Gamma說,要面向抽象編程。面向接口編程是面向?qū)ο蟮暮诵摹?/p>

圖片4

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

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

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(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ū)ο缶幊痰奶卣靼ǎ悍庋b(Encapsulation):封裝是將相關(guān)的數(shù)據(jù)和方法組合在一起形成類的機制。它可以隱藏內(nèi)部實現(xiàn)細節(jié),只暴露必要的...詳情>>

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

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

2023-05-08 13:41:00