zoukankan      html  css  js  c++  java
  • 【java】接口的作用|实例讲解java接口

    接口作用:

    1. 解决java不能多继承,用过接口变相实现多继承。

    2. 屏蔽实现的不同的差异

    接口实例

    现在假如说,java想让oracle和mysql实现自己的数据源和关闭数据源,java只需要做一个接口interface出来。而oracle和mysql自己去实现这个接口即可。

    ok 

    下面先上一个组织结构,需要用到工厂模式。

    总共三个包,分别是

    1. 接口包 com.rs.biz

    2. 工厂包com.rs.factory

    3. 实现类com.rs.impl

    最后一个是测试类。


    第二步,开始写接口DateBase.java。

    package com.rs.biz;


    import java.sql.Connection;


    public interface DateBase {

          //定义两个方法

          Connection getConnection(String url,String user,String password);

          void closed();

    }


    第三步,写实现类

    Mysql.java

    --------------------------------------------------------------

    package com.rs.impl;


    import java.sql.Connection;


    import com.rs.biz.DateBase;


    public class Mysql implements DateBase {


    @Override

    public Connection getConnection(String url, String user, String password) {

        System.out.println("我是mysql厂商实现的返回connection");

        return null;

    }


    @Override

    public void closed() {

    System.out.println("Mysql数据库connection关闭");

    }


    }

    --------------------------------------------------------------

    Oracle.java

    --------------------------------------------------------------

    package com.rs.impl;


    import java.sql.Connection;


    import com.rs.biz.DateBase;


    public class Oracle implements DateBase {


        @Override

        public Connection getConnection(String url, String user, String password) {

            System.out.println("我是Oracle厂商实现的返回connection");

            return null;

        }


        @Override

        public void closed() {

            System.out.println("Oracle数据库connection关闭");

        }

    }


    ok,基本功已经做完了,现在开始思考接口的作用,既然接口是为了屏蔽不同类的差异性的,那么我们需要一个工厂类,用来返回你想要的结果,是oracle还是mysql的,此时我们开始编写工厂类。

    --------------------------------------------------------------

    DbFactory.java

    --------------------------------------------------------------

    package com.rs.factory;


    import com.rs.biz.DateBase;

    import com.rs.impl.Mysql;

    import com.rs.impl.Oracle;


    public class DbFactory {

        public static DateBase getConnection(DateBase db){

            return db;//通过传入的db类型,返回不同的类。这些类都是实现了接口DateBase的类

        }

    }


    --------------------------------------------------------------

    好了,下面我们开始写测试类TestDateBase.java

    --------------------------------------------------------------

    packagetest.com.rs;

    importcom.rs.biz.DateBase;

    importcom.rs.factory.DbFactory;

    importcom.rs.impl.Mysql;

    importcom.rs.impl.Oracle;

    public classTestDateBase {

        public static voidmain(String[] args) {

           String url = "";

           String user = "";

           String password = "";

           

           DateBase db = newDbFactory().getConnection(newOracle());

           db.getConnection(url, user, password);

           db.closed();

           

           DateBase db2 = newDbFactory().getConnection(newMysql());

           db2.getConnection(url, user, password);

           db2.closed();

        }

    }


    --------------------------------------------------

    打印输出

    我是Oracle厂商实现的返回connection

    Oracle数据库connection关闭

    我是mysql厂商实现的返回connection

    Mysql数据库connection关闭

    --------------------------------------------------------------------

    讲解结束,理解这段代码后,你可以更改一下你的工厂类,将获得连接那个方法更改为用户不可见,自己设计好,或者从一个配置文件读出。




    如有不懂的 可以联系小弟,我们一起进步,QQ 394263788 转载请说明,写文章的不多了。



  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/ae6623/p/4416661.html
Copyright © 2011-2022 走看看