java.两个例子充分阐述多态的可拓展性
下面我將以兩個例子來充分闡述java中多態的可拓展性,作為一名優秀的程序員,就必須了解程序的可拓展性,非常利于程序后續的開發。
????? 第一個例子:利用電腦的主板來作為例子,就我們所熟悉的電腦的主板,里面是不是有很多模塊,網卡,聲卡,想要用到這些功能,只能當主板運行起來,再給網卡和聲卡供電就可以,但這用軟件語言怎么來實現呢?是不是先要主板跑起來,主板再讓聲卡或者網卡跑起來,但這樣做,拓展性不高讓聲卡和網卡跑起來的操作是重復的,而且有很多模塊也具備這樣的功能,就單純讓主板上的模塊跑起來,這是其一,萬一,那一天,技術更新,新的模塊出現了,是不是又要創建模塊的對象,然后又跑起來,這顯然是不利于開發的,但是針對這一個問題,主板的廠商和聲卡,網卡的廠商商量后,以后就用一個PCI接口來連接主板和模塊,徹底解決了更新不能用或者重復使用的問題,而這恰恰對應了我們的java中的多態,利用多態,我們能大大提高程序的可拓展性!具體代碼如下!
??? /*
需求:
電腦運行實例,
電腦運行基于主板。
*/
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()//接口型引用指向自己的子類對象。
?? ?{
?? ??? ?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());
?? ??? ?
?? ?}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二個例子:利用常用數據庫來解釋多態,就我們熟知的數據庫而言,目前有兩種數據庫的連接模式:JDBC和Hibernatelian連接,使用數據庫,都有兩個必不可少的操作,連接和關閉,這時候,使用接口,把這兩種操作封裝起來,需要使用那種連接模式直接更換類名就可以了!具體代碼如下!
/*
需求:數據庫的操作。
數據是:用戶信息。
1,連接數據庫。JDBC? Hibernate
2,操作數據庫。
?? ?c create r read? u update? d delete
3,關閉數據庫連接。
*/
interface UserInfoDao
{
?? ?public void add(User user);
?? ?public void delete(User user);
}
class UserInfoByJDBC implements UserInofDao
{
?? ?public void add(User user)
?? ?{
?? ??? ?1,JDBC連接數據庫。;
?? ??? ?2,使用sql添加語句添加數據。;
?? ??? ?3,關閉連接。
?? ?}
?? ?public void delete(User user)
?? ?{
?? ??? ?1,JDBC連接數據庫。;
?? ??? ?2,使用sql添加語句刪除數據。;
?? ??? ?3,關閉連接。
?? ?}
}
class UserInfoByHibernate implements UserInfoDao
{
?? ?public void add(User user)
?? ?{
?? ??? ?1,Hibernate連接數據庫。;
?? ??? ?2,使用sql添加語句添加數據。;
?? ??? ?3,關閉連接。
?? ?}
?? ?public void delete(User user)
?? ?{
?? ??? ?1,Hibernate連接數據庫。;
?? ??? ?2,使用sql添加語句刪除數據。;
?? ??? ?3,關閉連接。
?? ?}
}
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);
?? ?}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
總結:
1.這兩個例子都使用了接口來抽象出一些重復的操作,為了讓不同的模塊能直接快捷地使用這些操作,直接使用多態的向上轉型(看我之前的博客),能后用父類引用去調用,反正之后無論是技術更新而有了新的模塊或者更換已有模塊,我們都可以使用父類的引用去直接調用它們共同的操作!
2.不一定用接口,也可以使用抽象類,但是,使用接口,可拓展性更高,以后有更新,可以直接改動接口,不用去改動抽象類,其次,使用接口,能夠被多繼承!這也是方便的地方。
?
轉載于:https://www.cnblogs.com/liangqiyuan/p/5572672.html
總結
以上是生活随笔為你收集整理的java.两个例子充分阐述多态的可拓展性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rails.vim环境安装(ubuntu
- 下一篇: 接收蓝牙广播onReceive中getS