【滥用接口】
现在流行"面对接口编程",这本身本来是不错,但是滥用接口的现象却经常发生。
"面向接口",于是所有的类都有一个对应的接口,接口的函数声明和类一模一样,而且一个接口只有一个类来实现它。这样的面向接口有什么意义哪? (为了用Spring的事务的情况除外)
根据"迪比特法则(Law of Demter)",一个对象应当对其他对象有尽可能少的了解。一个接口内应该只定义对方所需要的方法,而不要把一些没用的方法声明放在接口里面。
例如如下一个类:
public class MyCounter
{
private int n1;
private int n2;
public MyCounter(int n1,int n2)
{
this。n1=n1;
this。n2=n2;
}
public void setN1(int n1)
{
return this。n1 = n1;
}
public void setN2(int n2)
{
return this。n2 = n2;
}
public int getN1()
{
return n1;
}
public int getN2()
{
return n2;
}
public int getResult()
{
return n1 + n2;
}
}
我们可以看到,这个类的主要目的是得到计算结果,所以正确的接口应该类似:
public interface Counter
{
int getResult();
}
但是很多情况下,经常是这样的接口:
public interface Counter
{
int getResult();
int getN1();
int getN2();
void setN1(int n1);
void setN2(int n2);
}
我们想一想,这样做有2个后果:
1.除了getResult之外,其他的函数我们根本用不到,所以是多余的。
2.如果我们要自己实现一个Counter,如果接口中仅仅定义了getResult,我们仅仅需要实现它就可以了。我们自己的类可能是多个数运算,有乘除加减等等各种运算,参数也有可能是一些数组。但是如果按照第二种方法声明接口的话,我们就必须实现后面的四个方法,如果这样的话,实现这样东西不仅没用,而且浪费时间。我们恐怕要大声骂娘了吧。
所以,接口有好的作用,但是不要滥用。
■ 如果你的接口永远只有一个类实现,那么可能就没有必要用接口。
■ 你的接口只需要声明别人用到的函数即可。
上一页 [1] [2]
责任编辑:cyth