面向接口编程及简单Demo

几乎所有人都提倡使用面向接口的编程,可是它的优势体现在哪里,如果一个技术没有什么优势,它是不会被提倡的。刚开始学习接口的时候,我在想,一个类去实现一个接口,另一个类也去实现这个接口。不过实现了某个接口,就意味着要实现这个接口的方法,所以要在实现类中写一遍这个接口的方法,并把它实现。可是仔细一想即使没有这个接口,我们也可以实现这些方法,岂不是多此一举。真的是这样吗?

       面向接口的编程到底能给我们带来什么?今天就给大家写一个简单实例,通过这个实例来分析,面向接口编程是什么,怎么做以及它的优势何在。相信大家看完这个实例,就会对面向接口编程有新的认识。

       我们先给出这样一个问题,写一个程序模拟动物的吼叫声。那么我们先来看看,不用面向接口编程的思想我们要怎么写这个程序。

什么是面向接口编程及一个简单实例

一、不采用接口的例子

  1. 1

    一般我们会这样写:比如模拟狗叫声,我们会写一个狗类DogWithoutInterface.java,然后在这个类中添加一个sing()方法,输出”旺旺旺!“。然后编写测试方法testWithoutInterface.java,创建狗类,并调用狗的吼叫方法sing();代码如下图。

    什么是面向接口编程及一个简单实例
    什么是面向接口编程及一个简单实例
  2. 2

    如果我们还要模拟老虎的叫声,此时再编写一个TigerWithoutInterface.java类,实现老虎的叫声,然后在测试类testWithoutInterface.java中,加入老虎类,并调用sing方法。如下图:

    什么是面向接口编程及一个简单实例
    什么是面向接口编程及一个简单实例
  3. 3

    点击运行,输出结果如下图。

    什么是面向接口编程及一个简单实例
  4. 4

    当我们还要模拟一些其他动物时,只要加入这个动物类,然后在测试方法中实例化这个类就可以了。

  5. 5

    不知道大家有没有接触过Spring,Spring的一个重点是要求业务和实现分离,比如我们模拟狗叫声是一个业务,要实现此业务,我们只需要在业务层调用狗类。在本例中具体的体现就是,我们编写的测试类不能直接访问狗类和老虎类,而是通过访问业务类,间接访问实现类(狗类)。所以首先我们要编写一个狗类的业务类businessDogWithout.java。然后在testWithoutInterface.java测试类中调用此业务类,实现狗的吼叫声业务。代码如下图。

    什么是面向接口编程及一个简单实例
    什么是面向接口编程及一个简单实例
  6. 6

    假设现在有50个动物,我们岂不是要写50个业务类,有没有一种方法我们只需要写一个业务类就可以了哪?下面就来看,我们如何用面向接口的编程去实现。

    END

二、采用面向接口编程的思想

  1. 1

    首先所有的动物都会吼叫,所以我们定义一个接口IAnimal,这个接口里面有一个方法sing();如下图。

    什么是面向接口编程及一个简单实例
  2. 2

    定义一个Dog类和一个Tiger类,实现此接口,代码如下图。

    什么是面向接口编程及一个简单实例
    什么是面向接口编程及一个简单实例
  3. 3

    编写业务层Business类,请仔细看本代码。业务类定义了一个IAnimal的接口变量,这个是重点,因为当我们需要狗对象时,就给它一个狗对象;当我需要老虎对象时,就给它一个老虎对象;当我们需要什么动物,就给他什么动物对象,从而实现了,不用给每个动物都写一个业务类。请再往下看,我们来写测试类。

    什么是面向接口编程及一个简单实例
  4. 4

    编写测试类Business,在测试类中,创建业务类,通过setAnimal()方法,给此业务一个动物对象,比如狗对象,这样在调用的时候,业务类的IAnimal接口变量就会被赋值成狗对象,调用sing()方法时,就会去执行Business类中的sing()方法中的animal.sing()(狗对象.sing())。也许在这个地方大家会有疑问,为什么“狗对象”却赋值给了“狗类”实现的接口(IAnimal)的变量animal,然后还能利用此接口变量(animal)去调用向上转型对象(new Dog())实现的接口方法(sing())。这就是面向接口编程的核心所在,通过向上转型,给接口赋值。如果大家不明白向上转型,请参考第五步中的文章。

    什么是面向接口编程及一个简单实例
  5. 5

    如果大家不明白“java向上转型”,可以参考文章“java向上转型和向下转型该如何理解”。

    链接为:

  6. 6

    当我们还需要模拟50个动物时,只需要创建这些动物的类,而不用去修改业务层,在测试的时候把需要的那个动物对象,注入到业务层就可以了,很方便。

    END

三、分析

  1. 1

    面向接口编程,是有好处的,通过本示例也可以看出,在Spring中,如果要业务和具体实现的分离,采用面向接口的编程可以省去大量代码。当然在开发大型的java项目中,分层是不可避免的,分层可以使框架的结构清晰,容易理解,并且提高开发的效率。所以本例也从一个侧面看到了面向接口编程的优点。当然这里牵扯到一个向上转型的概念,请大家好好理解这个概念。可以参考链接:

猜你喜欢

转载自blog.csdn.net/xiakexiaohu/article/details/80145532