作者:罗代均,ldj_work#126.com ,转载请保持完整性.
先看一段程序
1.现有一个支付账款的类Payment,有一个批量支付的方法
public void pay(List list){
//遍历List,进行支付
}
2.编写客户端程序,
public static void main(String[] args){
Payment payment=new Payment();
List list= new ArrayList();
list.add(...);
list.add(...); //添加帐号,
.....
payment.pay(list);
}
ok,现在由于ArrayList没有线程同步
我想改为Vector代替
只需要修改客户端程序的一句话: List list = new Vector();
而包含业务逻辑的Payment类,不需要做任何变化。
如果你用ArrayList list=new ArrayList()的话,
pay()方法为: pay(ArrayList list);
改为Vector后,pay也必须改为 pay(Vector v);
客户端,Payment的pay()方法。。。。,所有关联的代码你都必须改,这些代码分散到系统的各个地方,很容易遗忘某个地方,忘记修改了。。。。
这就是面向接口的好处,也就是说,类要依赖接口,而不依赖具体的实现,就像Payment,pay方法依赖的是List接口,而不是其实现类ArrayList,所以我们更改了List接口的实现(Vector),不会影响到 Payment,这就将变化的影响减到最低.