教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線:400-618-4000

揭秘什么是面向接口編程?

更新時(shí)間:2020年07月17日15時(shí)21分 來(lái)源:傳智播客 瀏覽次數(shù):

最近有很多同學(xué)來(lái)問(wèn)面向接口編程的好處,那么接下來(lái)就用一個(gè)案例來(lái)給大家說(shuō)明一下面向接口編程。

案例:有一個(gè)電腦類(lèi)(Computer),電腦除了有基本的開(kāi)機(jī)關(guān)機(jī)功能外,還有連接任何外接設(shè)備的功能,比如能電腦能連接外置鍵盤(pán)(Keyboard),鼠標(biāo)(Mouse),投影儀(Projecter)等很多外置設(shè)備,請(qǐng)用代碼來(lái)實(shí)現(xiàn)該需求。

實(shí)現(xiàn)步驟如下:

 //  鍵盤(pán)類(lèi)
public class Keyboard {
   public void work(){
    System.out.println("外置鍵盤(pán)可以用來(lái)輸入數(shù)據(jù)");
   }
}
 //  鼠標(biāo)類(lèi)
public class Mouse{
   public void work(){
    System.out.println("鼠標(biāo)方便操作人員打開(kāi)一些程序");
   }
}
  // 投影儀類(lèi)
public class Projecter{
   public void work(){
    System.out.println("投影儀把屏幕投影到墻上放大");
   }
}
 //  定義筆記本類(lèi)
 // 功能: 開(kāi)機(jī),關(guān)機(jī),接收外置設(shè)備 鍵盤(pán) 鼠標(biāo) 投影儀 并讓其工作
public class Computer {
   //開(kāi)機(jī)
   public void openComputer(){
    System.out.println("筆記本開(kāi)機(jī)");
   }
   //關(guān)機(jī)
   public void closeComputer(){
    System.out.println("筆記本關(guān)機(jī)");
   }
   //連接外置鍵盤(pán) 并讓其輸入
   public void connectKeyboard(Keyboard k){
    k.work();
   }
   //連接鼠標(biāo) 并讓其點(diǎn)擊
   public void connectMouse(Mouse m){
    m.work();
   }
   //連接投影儀 并讓其投影
   public void connectProjecter(Projecter p){
    p.work();
   }
}

首先需要?jiǎng)?chuàng)建三個(gè)類(lèi)Keyboard,Mouse,Projecter即鍵盤(pán)、鼠標(biāo)、投影儀類(lèi),并且都有自己的功能

其次需要?jiǎng)?chuàng)建一個(gè)Computer類(lèi),類(lèi)里面有開(kāi)機(jī)(openComputer)方法,也有關(guān)機(jī)(closeComputer)方法,而且還有三個(gè)接收外置設(shè)備的方法connectKeyboard,connectMouse,connectProjecter,代碼如下:

現(xiàn)在這個(gè)需求我們就已經(jīng)做完了。但是假如此時(shí)一些電腦配件的生產(chǎn)商又生產(chǎn)出了一種新設(shè)備“U盤(pán)”用來(lái)做外置存儲(chǔ)的,那么這時(shí)候我們除了需要再寫(xiě)一個(gè)U盤(pán)類(lèi)之外,還需要在Computer類(lèi)中加一個(gè)連接U盤(pán)的方法(這體現(xiàn)在現(xiàn)實(shí)生活中就是把原來(lái)已經(jīng)制作好的電腦解體重新改裝出一個(gè)用來(lái)連接U盤(pán)的口子),增加的代碼如下:

 //  U盤(pán)類(lèi)
public class UDisk{
   public void work(){
     System.out.println("U盤(pán)可以用來(lái)存儲(chǔ)數(shù)據(jù)");
   }
}
 // 定義筆記本類(lèi)
 //  功能: 開(kāi)機(jī),關(guān)機(jī),接收外置設(shè)備 鍵盤(pán) 鼠標(biāo) 投影儀 并讓其工作
public class Computer {
   //開(kāi)機(jī)
   public void openComputer(){
     System.out.println("筆記本開(kāi)機(jī)");
   }
   //關(guān)機(jī)
   public void closeComputer(){
     System.out.println("筆記本關(guān)機(jī)");
   }
   //連接外置鍵盤(pán) 并讓其輸入
   public void connectKeyboard(Keyboard k){
     k.work();
   }
   //連接鼠標(biāo) 并讓其點(diǎn)擊
   public void connectMouse(Mouse m){
     m.work();
   }
   //連接投影儀 并讓其投影
   public void connectProjecter(Projecter p){
     p.work();
   }
   //連接U盤(pán) 并讓其存儲(chǔ)
   public void connectUDisk(UDisk u){
     u.work();
   }
}

對(duì)于U盤(pán)新設(shè)備,我們經(jīng)過(guò)改裝電腦,可以讓電腦連接使用了。但是可恨的是就在此時(shí),電腦配件的生產(chǎn)商又生產(chǎn)出了外置音響,我們快要瘋了,因?yàn)槲覀儾坏貌挥忠央娔X拆了,重新改裝出一個(gè)連接外置音響的口子。這時(shí)候我們并沒(méi)有著急去改裝自己的電腦,因?yàn)槿f(wàn)一自己改裝完了之后電腦配件生產(chǎn)商又生產(chǎn)出了其他的外置設(shè)備呢?難道我們就一直改裝下去嗎?那究竟有沒(méi)有一種解決辦法呢??答案是肯定的,接口的出現(xiàn)很好的解決了這一問(wèn)題,我們向電腦配件生產(chǎn)商提供了一套規(guī)范名叫USB,告訴他們以后再生產(chǎn)任何的設(shè)備都要留出USB形狀的對(duì)接口,那么我們的電腦只需要留出一個(gè)USB形狀的對(duì)接口,用來(lái)連接任何具有該形狀對(duì)接口的設(shè)備即可,改進(jìn)代碼如下:

//  定義筆記本類(lèi)
//  功能: 開(kāi)機(jī),關(guān)機(jī),接收任何USB設(shè)備
public class Computer {
   //開(kāi)機(jī)
   public void openComputer(){
     System.out.println("筆記本開(kāi)機(jī)");
   }
   //關(guān)機(jī)
   public void closeComputer(){
     System.out.println("筆記本關(guān)機(jī)");
   }
   //連接USB設(shè)備 并讓其進(jìn)行相應(yīng)的工作
   public void connectUSB(USB device){   //父接口的引用可以接收任何的子類(lèi)對(duì)象,多態(tài)!
     device.work();     //此處運(yùn)行的是子類(lèi)的重寫(xiě)后的work方法
   }
}
 //  自定義的USB接口
 //  規(guī)范  USB設(shè)備能運(yùn)行并完成相應(yīng)的功能
public interface USB {
   public abstract void work();
}
 // 鍵盤(pán)類(lèi)
public class Keyboard implements USB{
   public void work(){
     System.out.println("外置鍵盤(pán)可以用來(lái)輸入數(shù)據(jù)");
   }
}
 //  鼠標(biāo)類(lèi)
public class Mouse implements USB{
   public void work(){
     System.out.println("鼠標(biāo)方便操作人員打開(kāi)一些程序");
   }
}

經(jīng)過(guò)這樣的設(shè)計(jì),我們的電腦只要留出用來(lái)連接USB設(shè)備的對(duì)接口就可以了,不管生產(chǎn)商們生產(chǎn)任何的外接設(shè)備,只要他們按照USB接口規(guī)范來(lái),他們都能夠接入到電腦上去,這樣就極大的增強(qiáng)了電腦的拓展性,以及設(shè)備的可維護(hù)性。

經(jīng)過(guò)這個(gè)案例,大家應(yīng)該明白面向接口編程給我們帶來(lái)的便利了吧。面向接口編程就是增強(qiáng)了代碼的拓展性,而接口就是體現(xiàn)的一種規(guī)范,也是提現(xiàn)的一種拓展思想。



猜你喜歡:

敏捷開(kāi)發(fā)流程圖和敏捷開(kāi)發(fā)十二原則

獲取學(xué)習(xí)資源


0 分享到:
和我們?cè)诰€交談!