ioc spring技术手册学习
原创
©著作权归作者所有:来自51CTO博客作者java硕哥的原创作品,请联系作者获取转载授权,否则将追究法律责任
BOB大叔书中依赖倒置原则:
1.高层模块不应该依赖低层模块,二者都应该依赖于抽象。
2.抽象不应该依赖于细节,细节应该依赖于抽象。
之所以称之为‘依赖倒置’是相对传统的过程式编程而言,依赖关系结构被倒置了。
public class Business{
private FloppyWriter writer = new FloppyWrite();
...
public void save{
...
Writer.save();
}
}
此时Business类就依赖于具体的低层模块FloppyWriter ,如果要改变存储介质为usb则必须修改Business。
介于“高层模块不应该依赖低层模块”,程序修改如下:
public interface DeviceWriter{
void save()
}
class UsbDeviceWrite implements DeviceWriter{
void save(){
...
//save to usb device;
}
}
class FloppyDiskWrite implements DeviceWriter{
void save(){
...
//save to floppy disk device;
}
}
public class Business{
private DeviceWriter writer = new FloppyWrite();
public void setDeviceWriter(DeviceWriter dw){
this.writer = dw;
}
...
public void save{
...
writer.save();
}
}
可以看到无论低层的存储如何变化,Business都不要修改。此时就是Business(高层模块)和UsbDeviceWrite 、FloppyDiskWrite(低层模块) 依赖于抽象(DeviceWriter接口)。您也可以编写一个配置管理程序,由xml或.property文件来更改配置,连setDeviceWriter方法都不要写。事实上spring核心容器就提供了这样的配置管理的功能。