1、接口编程的好处
我们知道,在实际的项目开发中,客户的需求是经常发生变化的。那如果说,我们不采用接口编程,那我们就必须修改我们业务层的代码。长此以往,这样做的后果是什么呢?答:bug多,不易维护,接手困难
如果我们采用接口编程的话:我们只需要在接口中把客户的需求提取出来, 写在接口中。这样,客户的需求变化时,我们可以实现响应接口的新的实现类,这样就不需要更改原来的代码,这样就避免了诸多问题。
另外,在设计模式的原则里的开闭原则,就是要使用接口来实现对扩展开放,对修改关闭。这样也是为了减少各个类之间的依赖。
还有就是,接口开发,小组成员分工合作,互不干扰。适于团队的协作开发。
2、接口编程的缺点
接口编程也不尽然都是好处。缺点就是接口设计困难,因为,还没实现,就得把所有的东西想好。
3、实现方式的选择。
先来看个例子:
interface A { //接口A
public void eat();
}
public class B implements A {
@Override
public void eat() {
System.out.println("吃");
}
public void drink(){
System.out.println("喝");
}
}
两种方式
A a = new B();//向上转型,即类B的对象的引用赋值给接口
B b = new B();//正常的实例化。
我们先来看第一种:
这种方式,在上面的例子中,只能这样写:
a.eat()
而当你这样写时:
a.drink()
这种方式是会报错的。错误内容为:
The method drink() is undefined for the type A
这是因为,在本例中,B在向上转型为A的时候,是“失去”,而非“得到”。也就是说,“a”的功能窄化!
如果这样写: ((B)a).drink()//向下转型
是可以调用的。
我们在来看第二种:
第二种理所当然了,连个方法都可以调用。无需多言。
那我们的结论是什么?
应该优先使用第一种,前提时,存在“合理”的接口时
应
该
优
先
使
用
第
一
种
,
前
提
时
,
存
在
“
合
理
”
的
接
口
时