更新時間:2020-07-17 來源:黑馬程序員 瀏覽量:
最近有很多同學來問面向接口編程的好處,那么接下來就用一個案例來給大家說明一下面向接口編程。
案例:有一個電腦類(Computer),電腦除了有基本的開機關機功能外,還有連接任何外接設備的功能,比如能電腦能連接外置鍵盤(Keyboard),鼠標(Mouse),投影儀(Projecter)等很多外置設備,請用代碼來實現該需求。
實現步驟如下:
// 鍵盤類 public class Keyboard { public void work(){ System.out.println("外置鍵盤可以用來輸入數據"); } } // 鼠標類 public class Mouse{ public void work(){ System.out.println("鼠標方便操作人員打開一些程序"); } } // 投影儀類 public class Projecter{ public void work(){ System.out.println("投影儀把屏幕投影到墻上放大"); } } // 定義筆記本類 // 功能: 開機,關機,接收外置設備 鍵盤 鼠標 投影儀 并讓其工作 public class Computer { //開機 public void openComputer(){ System.out.println("筆記本開機"); } //關機 public void closeComputer(){ System.out.println("筆記本關機"); } //連接外置鍵盤 并讓其輸入 public void connectKeyboard(Keyboard k){ k.work(); } //連接鼠標 并讓其點擊 public void connectMouse(Mouse m){ m.work(); } //連接投影儀 并讓其投影 public void connectProjecter(Projecter p){ p.work(); } }
首先需要創建三個類Keyboard,Mouse,Projecter即鍵盤、鼠標、投影儀類,并且都有自己的功能
其次需要創建一個Computer類,類里面有開機(openComputer)方法,也有關機(closeComputer)方法,而且還有三個接收外置設備的方法connectKeyboard,connectMouse,connectProjecter,代碼如下:
現在這個需求我們就已經做完了。但是假如此時一些電腦配件的生產商又生產出了一種新設備“U盤”用來做外置存儲的,那么這時候我們除了需要再寫一個U盤類之外,還需要在Computer類中加一個連接U盤的方法(這體現在現實生活中就是把原來已經制作好的電腦解體重新改裝出一個用來連接U盤的口子),增加的代碼如下:
// U盤類 public class UDisk{ public void work(){ System.out.println("U盤可以用來存儲數據"); } } // 定義筆記本類 // 功能: 開機,關機,接收外置設備 鍵盤 鼠標 投影儀 并讓其工作 public class Computer { //開機 public void openComputer(){ System.out.println("筆記本開機"); } //關機 public void closeComputer(){ System.out.println("筆記本關機"); } //連接外置鍵盤 并讓其輸入 public void connectKeyboard(Keyboard k){ k.work(); } //連接鼠標 并讓其點擊 public void connectMouse(Mouse m){ m.work(); } //連接投影儀 并讓其投影 public void connectProjecter(Projecter p){ p.work(); } //連接U盤 并讓其存儲 public void connectUDisk(UDisk u){ u.work(); } }
對于U盤新設備,我們經過改裝電腦,可以讓電腦連接使用了。但是可恨的是就在此時,電腦配件的生產商又生產出了外置音響,我們快要瘋了,因為我們不得不又要把電腦拆了,重新改裝出一個連接外置音響的口子。這時候我們并沒有著急去改裝自己的電腦,因為萬一自己改裝完了之后電腦配件生產商又生產出了其他的外置設備呢?難道我們就一直改裝下去嗎?那究竟有沒有一種解決辦法呢??答案是肯定的,接口的出現很好的解決了這一問題,我們向電腦配件生產商提供了一套規范名叫USB,告訴他們以后再生產任何的設備都要留出USB形狀的對接口,那么我們的電腦只需要留出一個USB形狀的對接口,用來連接任何具有該形狀對接口的設備即可,改進代碼如下:
// 定義筆記本類 // 功能: 開機,關機,接收任何USB設備 public class Computer { //開機 public void openComputer(){ System.out.println("筆記本開機"); } //關機 public void closeComputer(){ System.out.println("筆記本關機"); } //連接USB設備 并讓其進行相應的工作 public void connectUSB(USB device){ //父接口的引用可以接收任何的子類對象,多態! device.work(); //此處運行的是子類的重寫后的work方法 } } // 自定義的USB接口 // 規范 USB設備能運行并完成相應的功能 public interface USB { public abstract void work(); } // 鍵盤類 public class Keyboard implements USB{ public void work(){ System.out.println("外置鍵盤可以用來輸入數據"); } } // 鼠標類 public class Mouse implements USB{ public void work(){ System.out.println("鼠標方便操作人員打開一些程序"); } }
經過這樣的設計,我們的電腦只要留出用來連接USB設備的對接口就可以了,不管生產商們生產任何的外接設備,只要他們按照USB接口規范來,他們都能夠接入到電腦上去,這樣就極大的增強了電腦的拓展性,以及設備的可維護性。
經過這個案例,大家應該明白面向接口編程給我們帶來的便利了吧。面向接口編程就是增強了代碼的拓展性,而接口就是體現的一種規范,也是提現的一種拓展思想。
猜你喜歡:
黑馬程序員java高級軟件工程師課程