<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢(mèng)想飛翔

    自強(qiáng)不息
    posts - 111, comments - 30, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    為什么要使用接口

    Posted on 2009-03-10 17:30 love1563 閱讀(959) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

        首先,如果沒(méi)有接口會(huì)怎么樣呢?一個(gè)類總歸可以從另一類繼承,難道還不夠么?

    沒(méi)接口會(huì)怎么樣
        
    一個(gè)對(duì)象需要知道其他的一些對(duì)象,并且與其他的對(duì)象發(fā)生相互作用,這是因?yàn)檫@些對(duì)象需要借助于其他對(duì)象的行為以便完成一項(xiàng)工作。這些關(guān)于其他對(duì)象的知識(shí),以及對(duì)其他對(duì)象行為的調(diào)用,都是使用硬代碼(Hardcode)寫在類里面的,可插入性幾乎為零。

        如果要加入一個(gè)新的類,僅僅意味著加入新的硬代碼,而不能給出動(dòng)態(tài)的可插入行。
        那么基于類的繼承是否可以提供一點(diǎn)幫助呢?比如現(xiàn)在有一個(gè)具體類,提供某種使用硬代碼寫在類的行為。現(xiàn)在,要提供一些類似的行為,并且實(shí)現(xiàn)動(dòng)態(tài)的可插入,也就是說(shuō),要能夠動(dòng)態(tài)地決定使用那種實(shí)現(xiàn)。一個(gè)可能的做法就是為這個(gè)類提供一個(gè)抽象超類,生命出子類要提供的行為,然后讓這個(gè)具體類繼承自這個(gè)抽象超類。同時(shí),為這個(gè)抽象超類提供另一個(gè)具體子類,這個(gè)子類以不同的方法實(shí)現(xiàn)了超類所生命的行為。客戶端可以動(dòng)態(tài)決定那個(gè)具體子類。這是否可以提供可插入性呢?
        答案是,這卻是可以在簡(jiǎn)單的情況下提供可插入性。但是由于java語(yǔ)言是一個(gè)單繼承的語(yǔ)言,換言之,一個(gè)類只能有一個(gè)超類,因此,在很多情況下,這個(gè)具體類可能已經(jīng)有了以超類,這時(shí)候,要給它加上一個(gè)新的超類是不可能的,如果硬要加的話,就只好把這個(gè)新的超類加到已有的超類上面,形成超超類的情況;如果這個(gè)超超類的位置已經(jīng)被占用了,就只好繼續(xù)向上移動(dòng),直到移動(dòng)到類等級(jí)結(jié)構(gòu)的最頂端。這樣一來(lái),對(duì)一個(gè)具體類的可插入性設(shè)計(jì),就變成了對(duì)整個(gè)等級(jí)結(jié)構(gòu)中所有的類的修改。
        這還是假設(shè)這些超類都是在設(shè)計(jì)師控制之下的。如果這些超類是一些軟件商提供的,設(shè)計(jì)師無(wú)法修改,怎么辦呢?如果有一個(gè)具體類,它有一個(gè)超類是Frame,那么新加入的超類就只好一直向上移動(dòng)到j(luò)ava.lang.Object類上面,這怎么可能呢?
        因此,沒(méi)有接口可插入性就沒(méi)有保證。

    接口是對(duì)可插入性的保證
        接口使可插入性變得可能。
        在一個(gè)類等級(jí)結(jié)構(gòu)中的任何一類可以實(shí)現(xiàn)一個(gè)接口,這個(gè)接口會(huì)影響到此類的所有子類,但是不會(huì)影響到此類的任何超類。此類將不得不實(shí)現(xiàn)這個(gè)接口所規(guī)定的方法,而其子類則可以從此類自動(dòng)繼承到這些方法,當(dāng)然也可以選擇置換掉所有的這些方法,或者其中的某一些方法。
        這時(shí)候,這些子類就具有了可插入性。

        關(guān)聯(lián)的可插入性

        正如前面所說(shuō)的,一個(gè)對(duì)象需要完成一項(xiàng)任務(wù),所以需要知道其他的對(duì)象,并且調(diào)用其他對(duì)象的方法。這個(gè)對(duì)象對(duì)其他對(duì)象的知識(shí)叫做關(guān)聯(lián)(Association)。
        如果一個(gè)關(guān)聯(lián)不是針對(duì)一個(gè)具體類的,而是針對(duì)一個(gè)接口的,那么任何實(shí)現(xiàn)這個(gè)接口的類就都可以滿足要求。換言之,當(dāng)前對(duì)象并不在意所關(guān)聯(lián)的是哪一個(gè)具體類。而僅僅關(guān)心這個(gè)類是否實(shí)現(xiàn)了某一個(gè)借口。

        這樣一來(lái),就可以動(dòng)態(tài)地將這個(gè)關(guān)聯(lián)從一個(gè)具體類轉(zhuǎn)換到另一個(gè)具體類,而這樣做的唯一條件是它們都實(shí)現(xiàn)某個(gè)接口。

        調(diào)用的可插入性
        同樣,一個(gè)對(duì)象不可避免地需要調(diào)用其他對(duì)象的方法。這種調(diào)用不一定飛的是某一個(gè)具體類,而可以是一個(gè)接口。這樣一來(lái),任何實(shí)現(xiàn)了這個(gè)接口的具體類都可以被當(dāng)前對(duì)象調(diào)用;而當(dāng)前對(duì)象到底調(diào)用的是哪一個(gè)具體的實(shí)例則完全可以動(dòng)態(tài)地決定。
        因此,接口提供了關(guān)聯(lián)以及方法調(diào)用上的可插入性,軟件系統(tǒng)的規(guī)模越大,生命周期越長(zhǎng),接口的重要性就越大。接口使得軟件系統(tǒng)在靈活性和可擴(kuò)展性、可插入性方面得到保證。


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲电影在线播放| 国产亚洲精品美女| 日本免费一区二区三区最新 | 亚洲伊人久久大香线蕉啊| 毛片免费视频在线观看| 日韩大片免费观看视频播放| 亚洲国产精品无码专区影院| 欧美在线看片A免费观看| 日韩在线一区二区三区免费视频 | 久久精品国产69国产精品亚洲| 亚洲网站在线免费观看| 国产亚洲福利一区二区免费看| 亚洲第一AV网站| 国产大片免费观看中文字幕| 鲁丝片一区二区三区免费| 亚洲一日韩欧美中文字幕在线| 亚洲一区二区三区偷拍女厕| 国产一精品一AV一免费孕妇| 一级女人18片毛片免费视频| 亚洲AV无码专区在线亚| 亚洲日韩激情无码一区| 性一交一乱一视频免费看| 精品免费视在线观看| 亚洲AV性色在线观看| 亚洲国产精品免费视频| 国产男女猛烈无遮档免费视频网站| 国产拍拍拍无码视频免费| 亚洲AV色欲色欲WWW| 亚洲国产美女精品久久| 亚洲人成网站在线观看播放| 免费黄色网址入口| 精品香蕉在线观看免费| 免费观看男人吊女人视频| 永久免费精品影视网站| 亚洲精品欧美综合四区| 亚洲午夜电影一区二区三区| 久久精品亚洲综合| 亚洲线精品一区二区三区 | 亚洲综合熟女久久久30p| 日本免费人成视频播放| 日韩一区二区a片免费观看|