Ioc的推荐实现方式
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/43900 |
Ioc的两种实现方式
Ioc(Inversion of Control)中文翻译为“控制反转”,Ioc的抽象概念是依赖关系转移,即“程序与实现必须依赖于抽象”。
控制反转最常见的实现方式就是依赖注入(Depedency Injection),依赖注入的含义是:保留抽象接口,让组件依赖抽象接口,当组件要与其他对象发生依赖关系时,通过抽象接口来注入依赖的实际对象。
在解说Ioc之前,先看一个设计的例子:
设计一个保存数据到软盘、USB设备的程序。 一、反面例子,没有使用Ioc
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 11:13:32* 反面教材 * 具体组件 */public class FloppyWriter { public void saveToDevice() { System.out.println("调用FloppyWriter.saveToDevice()方法: 保存到了Floppy设备上!"); }}/** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 11:14:25* 反面教材 * 业务逻辑 */public class BusinessObject { private FloppyWriter floppyWriter; public FloppyWriter getFloppyWriter() { return floppyWriter; }public void setFloppyWriter(FloppyWriter floppyWriter) { this.floppyWriter = floppyWriter; }public void save() { System.out.println("----开始调用业务组件BusinessObject的save()方法...."); floppyWriter.saveToDevice(); System.out.println("----结束调用业务组件BusinessObject的save()方法...."); }}/** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 1:15:17* 反面教材 * 客户端 */public class Client { public static void main(String args[]){ //构造并配置业务逻辑对象 BusinessObject businessObject=new BusinessObject(); FloppyWriter floppyWriter=new FloppyWriter(); businessObject.setFloppyWriter(floppyWriter);//调用业务逻辑方法 businessObject.save(); }}二、Ioc的实现推荐实现方式:setter方式
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 11:38:32* 抽象组件接口 */public interface IDeviceWriter { public void saveToDevice(); }/** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 11:44:46* 组件,存储到软盘设备 */public class FloppyWriter implements IDeviceWriter{ public void saveToDevice() { System.out.println("调用FloppyWriter.saveToDevice()方法: 保存到了Floppy设备上!"); }} /** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 11:44:57* 组件,存储到USB设备 */public class USBWriter implements IDeviceWriter{ public void saveToDevice() { System.out.println("调用USBWriter.saveToDevice()方法: 保存到了USB设备上!"); }}/** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 11:40:24* 可重用的业务逻辑 */public class BusinessObject { private IDeviceWriter writer; public IDeviceWriter getWriter() { return writer; }public void setWriter(IDeviceWriter writer) { this.writer = writer; }/** * 通用的保存业务方法 */public void save(){ System.out.println("----开始调用业务组件BusinessObject的save()方法...."); writer.saveToDevice(); System.out.println("----结束调用业务组件BusinessObject的save()方法...."); }}/** * Created by IntelliJ IDEA. * User: leizhimin * Date: * Time: 11:51:09* 客户端调用 */public class Client { public static void main(String args[]){ //构造两个组件对象 IDeviceWriter floppyWriter=new FloppyWriter(); IDeviceWriter usbWriter=new USBWriter(); //构造两个业务对象 BusinessObject businessObject1=new BusinessObject(); BusinessObject businessObject2= |


