举个例子,比如你写
Apple apple = new Apple();
People people = new People();
people.eat(apple);
然后有一天,客户说不想吃Apple了
给我改成吃Orange,然后你打开源文件
Orange orange = new Orange();
People people = new People();
people.eat(orange);
再重新编译
再一天,客户又觉得不好,要Peach了
Peach peach = new Peach();
People people = new People();
people.eat(peach);
再重新编译
………
然后你在客户的需求下崩溃了
倘若您用spring
Fruit fruit = (Fruit)beanFactory.getBean("fruit");
People people = (People)beanFactory.getBean("people");
people.eat(fruit);
这样使用了接口Fruit,你只需要在xml文件配置,更换fruit的bean,无需改变源代码。对于people也如此。
会发现,我们在这种设计下会少维护了很多代码,达到这样的效果的原因是因为,Fruit和People没有参杂在一起,没有谁调用了谁等等,实际上就是没有耦合,他们的关系由接口代替表示了。
手机码字,如有疏忽,请见谅