歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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.不一定用接口,也可以使用抽象類,但是,使用接口,可拓展性更高,以後有更新,可以直接改動接口,不用去改動抽象類,其次,使用接口,能夠被多繼承!這也是方便的地方。

Copyright © Linux教程網 All Rights Reserved