java用兩個(gè)例子充分闡述多態(tài)的可拓展性介紹
下面我將以?xún)蓚€(gè)例子來(lái)充分闡述java中多態(tài)的可拓展性,作為一名優(yōu)秀的程序員,就必須了解程序的可拓展性,非常利于程序后續(xù)的開(kāi)發(fā)。
第一個(gè)例子:
利用電腦的主板來(lái)作為例子,就我們所熟悉的電腦的主板,里面是不是有很多模塊,網(wǎng)卡,聲卡,想要用到這些功能,只能當(dāng)主板運(yùn)行起來(lái),再給網(wǎng)卡和聲卡供電就可以,但這用軟件語(yǔ)言怎么來(lái)實(shí)現(xiàn)呢?是不是先要主板跑起來(lái),主板再讓聲卡或者網(wǎng)卡跑起來(lái),但這樣做,拓展性不高讓聲卡和網(wǎng)卡跑起來(lái)的操作是重復(fù)的,而且有很多模塊也具備這樣的功能,就單純讓主板上的模塊跑起來(lái),這是其一,萬(wàn)一,那一天,技術(shù)更新,新的模塊出現(xiàn)了,是不是又要?jiǎng)?chuàng)建模塊的對(duì)象,然后又跑起來(lái),這顯然是不利于開(kāi)發(fā)的,但是針對(duì)這一個(gè)問(wèn)題,主板的廠(chǎng)商和聲卡,網(wǎng)卡的廠(chǎng)商商量后,以后就用一個(gè)PCI接口來(lái)連接主板和模塊,徹底解決了更新不能用或者重復(fù)使用的問(wèn)題,而這恰恰對(duì)應(yīng)了我們的java中的多態(tài),利用多態(tài),我們能大大提高程序的可拓展性!
具體代碼如下!
/* 需求: 電腦運(yùn)行實(shí)例, 電腦運(yùn)行基于主板。 */ interface PCI { public void open(); public void close(); } class MainBoard { public void run() { System.out.println("mainboard run "); } public void usePCI(PCI p)//PCI p = new NetCard()//接口型引用指向自己的子類(lèi)對(duì)象。 { if(p!=null) { p.open(); p.close(); } } } class NetCard implements PCI { public void open() { System.out.println("netcard open"); } public void close() { System.out.println("netcard close"); method(); } } class SoundCard implements PCI { public void open() { System.out.println("SoundCard open"); } public void close() { System.out.println("SoundCard close"); } } /* class MainBoard { public void run() { System.out.println("mainboard run"); } public void useNetCard(NetCard c) { c.open(); c.close(); } } class NetCard { public void open() { System.out.println("netcard open"); } public void close() { System.out.println("netcard close"); } } */ class DuoTaiDemo5 { public static void main(String[] args) { MainBoard mb = new MainBoard(); mb.run(); mb.usePCI(null); mb.usePCI(new NetCard()); mb.usePCI(new SoundCard()); } }
第二個(gè)例子:
利用常用數(shù)據(jù)庫(kù)來(lái)解釋多態(tài),就我們熟知的數(shù)據(jù)庫(kù)而言,目前有兩種數(shù)據(jù)庫(kù)的連接模式:JDBC和Hibernatelian連接,使用數(shù)據(jù)庫(kù),都有兩個(gè)必不可少的操作,連接和關(guān)閉,這時(shí)候,使用接口,把這兩種操作封裝起來(lái),需要使用那種連接模式直接更換類(lèi)名就可以了!
具體代碼如下!
/* 需求:數(shù)據(jù)庫(kù)的操作。 數(shù)據(jù)是:用戶(hù)信息。 1,連接數(shù)據(jù)庫(kù)。JDBC Hibernate 2,操作數(shù)據(jù)庫(kù)。 c create r read u update d delete 3,關(guān)閉數(shù)據(jù)庫(kù)連接。 */ interface UserInfoDao { public void add(User user); public void delete(User user); } class UserInfoByJDBC implements UserInofDao { public void add(User user) { 1,JDBC連接數(shù)據(jù)庫(kù)。; 2,使用sql添加語(yǔ)句添加數(shù)據(jù)。; 3,關(guān)閉連接。 } public void delete(User user) { 1,JDBC連接數(shù)據(jù)庫(kù)。; 2,使用sql添加語(yǔ)句刪除數(shù)據(jù)。; 3,關(guān)閉連接。 } } class UserInfoByHibernate implements UserInfoDao { public void add(User user) { 1,Hibernate連接數(shù)據(jù)庫(kù)。; 2,使用sql添加語(yǔ)句添加數(shù)據(jù)。; 3,關(guān)閉連接。 } public void delete(User user) { 1,Hibernate連接數(shù)據(jù)庫(kù)。; 2,使用sql添加語(yǔ)句刪除數(shù)據(jù)。; 3,關(guān)閉連接。 } } class DBOperate { public static void main(String[] args) { //UserInfoByJDBC ui = new UserInfoByJDBC(); // UserInfoByHibernate ui = new UserInfoByHibernate(); UserInfoDao ui = new UserInfoByHibernate(); ui.add(user); ui.delete(user); } }
總結(jié):
1. 這兩個(gè)例子都使用了接口來(lái)抽象出一些重復(fù)的操作,為了讓不同的模塊能直接快捷地使用這些操作,直接使用多態(tài)的向上轉(zhuǎn)型(看我之前的博客),能后用父類(lèi)引用去調(diào)用,反正之后無(wú)論是技術(shù)更新而有了新的模塊或者更換已有模塊,我們都可以使用父類(lèi)的引用去直接調(diào)用它們共同的操作!
2. 不一定用接口,也可以使用抽象類(lèi),但是,使用接口,可拓展性更高,以后有更新,可以直接改動(dòng)接口,不用去改動(dòng)抽象類(lèi),其次,使用接口,能夠被多繼承!這也是方便的地方。
以上這篇java用兩個(gè)例子充分闡述多態(tài)的可拓展性介紹就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 并發(fā)編程中如何創(chuàng)建線(xiàn)程
這篇文章主要介紹了Java 并發(fā)編程中如何創(chuàng)建線(xiàn)程,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03SpringBoot Security安裝配置及Thymeleaf整合
這篇文章主要介紹了SpringBoot Security安裝配置及Thymeleaf整合,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾)
這篇文章主要介紹了Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07java發(fā)送http get請(qǐng)求的兩種方法(總結(jié))
下面小編就為大家?guī)?lái)一篇java發(fā)送http get請(qǐng)求的兩種方法(總結(jié))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05springboot配置允許循環(huán)依賴(lài)問(wèn)題
這篇文章主要介紹了springboot配置允許循環(huán)依賴(lài)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set)
這篇文章主要介紹了解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12IDEA感覺(jué)不香了AI智能編程工具Cursor使用圖文教程
這篇文章主要介紹了IDEA感覺(jué)不香了AI智能編程工具Cursor使用,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05springboot項(xiàng)目實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能
這篇文章主要介紹了springboot項(xiàng)目實(shí)現(xiàn)斷點(diǎn)續(xù)傳,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08