【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 转载请说明,写文章的不多了。

时间: 2024-10-26 07:01:58

【java】接口的作用|实例讲解java接口的相关文章

实例讲解Java中的接口的作用

接口的作用 接口的作用简单一点就是:接口是用来标记类的,不同的类属于不同的接口(通过向上转型),管理接口比管理各种各样的类方便多了,接口体现了抽象的观点,什么是抽象?抽象就是"抽去像的部分". 使用接口解决问题 问题:现在我们要写个连接数据库的类给用户使用,有两个函数:一个返回Connection对象,另一个是关闭数据库,close(),一般的解决方法是:给每个数据库写一个类,再根据用户使用的数据库决定使用具体的类. 好的,我们看看这样有什么不好之处: (1).首先每个类都要有重复的代

java多线程-同步块实例讲解_java

java多线程-同步块 Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java 同步块用来避免竞争.本文介绍以下内容: Java 同步关键字(synchronzied) 实例方法同步 静态方法同步 实例方法中同步块 静态方法中同步块 Java 同步示例 Java 同步关键字(synchronized) Java 中的同步块用 synchronized 标记.同步块在 Java 中是同步在某个对象上.所有同步在一个对象上的同步块在同时只能被一个线程进入并执

实例讲解Java编程中数组反射的使用方法_java

什么是反射"反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为."这个概念常常会和内省(Introspection)混淆,以下是这两个术语在Wikipedia中的解释: 内省用于在运行时检测某个对象的类型和其包含的属性: 反射用于在运行时检测和修改某个对象的结构及其行为. 从它们的定义可以看出,内省是反射的一个子集.有些语言支持内省,但并不支持反射,如C++. 内省示例:instanceof 运算符用于检测某个对象是否属于特定的类. if (obj insta

实例讲解Java的设计模式编程中责任链模式的运用_java

定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止.类型:行为类模式类图: 首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2){ Handler2.response(request); }else if(i == 3){ Handler3.r

实例讲解Java的MyBatis框架对MySQL中数据的关联查询_java

mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映射到定义的Java Bean 中.下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的. 设计一个简单的博客系统,一个用户可以开多个博客,在博客中可以发表文章,允许发表评论,可以为文章加标签.博客系统主要有以下几张表构成: Author表:作者信息表,记录作者的信息,用户名和密码,邮箱等. Blog表   :  博客表,一个作者可以开多个博客,即Author和Blog的关系是一对多.

实例讲解Java批量插入、更新数据_java

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有.今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库. 前台页面: <span style="font-size:14px;"><body class="main_body" scroll="no"> <div class="employee_gun_dong"> <form nam

Java中的观察者模式实例讲解_java

观察者模式是一种行为设计模式.观察者模式的用途是,当你对一个对象的状态感兴趣,希望在它每次发生变化时获得通知.在观察者模式中,观察另外一个对象状态的对象叫做Observer观察者,被观察的对象叫着Subject被观察者.根据GoF规则,观察者模式的意图是: 复制代码 代码如下: 定义对象之间一对多的依赖关系,一个对象状态改变,其他相关联的对象就会得到通知并被自动更新. Subject(被观察者)包含了一些需要在其状态改变时通知的观察者.因此,他应该提供给观察者可以register(注册)自己和u

实例讲解Java并发编程之闭锁_java

闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有任何线程可以通过,当到达结束状态时,这扇门才会打开并容许所有线程通过.它可以使一个或多个线程等待一组事件发生.闭锁状态包括一个计数器,初始化为一个正式,正数表示需要等待的事件数量.countDown方法递减计数器,表示一个事件已经发生,而await方法等待计数器到达0,表示等待的事件已经发生.CountDownLatch强调的是一个线程(或多个)需要等待另外的n个线程干完某件事情之后才能继续执行. 场景应用: 10个运动员准备赛

两种java文件上传实例讲解_java

本文通过两种文件上传实例进行比较,帮助大家更好的学习java文件上传功能,具体内容如下 1. Java附件上传代码     @Controller public class UploadFile extends BaseJsonController{ /** * 附件上传 * * @param request * @param creativeFile * @param response * @return */ @RequestMapping(value = "/upload/uploadFi