zoukankan      html  css  js  c++  java
  • 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.不一定用接口,也可以使用抽象类,但是,使用接口,可拓展性更高,以后有更新,可以直接改动接口,不用去改动抽象类,其次,使用接口,能够被多继承!这也是方便的地方。

  • 相关阅读:
    设计模式:代理模式/中介者模式 / 桥接模式/适配器
    手把手教Qt Creator插件开发-QT运行计时器
    使用QT维护工具
    QDir+QTreeWidget (QViewWidget) 展示文件系统树形目录
    NUCLEO-L496ZG+Gokit3S+Rtthead+AT组件组网
    stm32CubeMX 结合Rtthread Env做BSP框架
    某个师兄教会了我,面对着沉重的科研任务,即使做一条咸鱼,也要做一条快乐的有梦想的咸鱼。哈哈哈
    经济金融的应用层______是什么呢___数量计算是底层吗?_____计算机的应用层___软件应用_____二进制运算是最底层__c/cpp都没有到计算了
    究竟是利己推动了社会进步还是利他推动了社会进步____经济学中的利己与利他,斯密在他的经济学着作《国民财富的性质和原因的研究》,究竟是利己推动了社会进步还是利他推动了社会进步
    1. 好好吃药 2. 多接触社会 3. 多跑路 4. 多打炮 【 在ethershock imm.mitbbs.com › 33126389
  • 原文地址:https://www.cnblogs.com/liangqiyuan/p/5572672.html
Copyright © 2011-2022 走看看