博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java.两个例子充分阐述多态的可拓展性
阅读量:5992 次
发布时间:2019-06-20

本文共 3097 字,大约阅读时间需要 10 分钟。

  下面我将以两个例子来充分阐述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

你可能感兴趣的文章
阻止ios锁屏
查看>>
头文件预编译 .
查看>>
SnagIt截图后无法在编辑器打开,不显示截图内容的解决办法
查看>>
jQuery插件之ajaxFileUpload
查看>>
基于LNMP的Zabbbix之Zabbix Agent源码详细安装,但不给图
查看>>
python 设计模式
查看>>
Android 隐藏系统状态栏
查看>>
Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件...
查看>>
ELF文件整体格式小结
查看>>
linux 下的 多线程http 下载器
查看>>
[转载]分享WCF聊天程序--WCFChat
查看>>
Lucene的并发性安全性以及锁
查看>>
VIM学习笔记 配置文件(vimrc)
查看>>
android 获取路径目录方法以及判断目录是否存在,创建目录 (转)
查看>>
血瘀体质
查看>>
SQL Server、IIS和 ASP.NET安全配置
查看>>
第二部分:开发简要指南-第六章 使用Fragments构建动态UI
查看>>
Android 开发(六)AsyncTask
查看>>
8、表中数据的排序与分组
查看>>
链表(建立+插入+删除+输出)
查看>>