Ioc的推荐实现方式

Ioc与依赖注入实践
Ioc的两种实现方式
 
Ioc(Inversion of Control)中文翻译为“控制反转”,Ioc的抽象概念是依赖关系转移,即“程序与实现必须依赖于抽象”。
 
控制反转最常见的实现方式就是依赖注入(Depedency Injection),依赖注入的含义是:保留抽象接口,让组件依赖抽象接口,当组件要与其他对象发生依赖关系时,通过抽象接口来注入依赖的实际对象。
 
在解说Ioc之前,先看一个设计的例子:
设计一个保存数据到软盘、USB设备的程序。
 
 
一、Ioc
 
 
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:13:32
 * 反面教材
 * 具体组件
 */
publicclass FloppyWriter {
    publicvoid saveToDevice() {
        System.out.println("调用FloppyWriter.saveToDevice()方法: 保存到了Floppy设备上!");
    }
}
 
 
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:14:25
 * 反面教材
 * 业务逻辑
 */
publicclass BusinessObject {
    private FloppyWriter floppyWriter;
 
    public FloppyWriter getFloppyWriter() {
        returnfloppyWriter;
    }
 
    publicvoid setFloppyWriter(FloppyWriter floppyWriter) {
        this.floppyWriter = floppyWriter;
    }
 
    publicvoid save() {
        System.out.println("----开始调用业务组件BusinessObjectsave()方法....");
        floppyWriter.saveToDevice();
        System.out.println("----结束调用业务组件BusinessObjectsave()方法....");
    }
}
 
 
 
 
 
 
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 1:15:17
 * 反面教材
 * 客户端
 */
publicclass Client {
    publicstaticvoid main(String args[]){
        //构造并配置业务逻辑对象
        BusinessObject businessObject=new BusinessObject();
        FloppyWriter floppyWriter=new FloppyWriter();
        businessObject.setFloppyWriter(floppyWriter);
 
        //调用业务逻辑方法
        businessObject.save();
    }
}
 
 
 
 
 
 
 
 
二、Iocsetter
 
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:38:32
 * 抽象组件接口
 */
publicinterface IDeviceWriter {
    publicvoid saveToDevice();
}
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:44:46
 * 组件,存储到软盘设备
 */
publicclass FloppyWriter implements IDeviceWriter{
    publicvoid saveToDevice() {
        System.out.println("调用FloppyWriter.saveToDevice()方法: 保存到了Floppy设备上!");
    }
}
 
 
 
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:44:57
 * 组件,存储到USB设备
 */
publicclass USBWriter implements IDeviceWriter{
    publicvoid saveToDevice() {
        System.out.println("调用USBWriter.saveToDevice()方法: 保存到了USB设备上!");
    }
}
 
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:40:24
 * 可重用的业务逻辑
 */
publicclass BusinessObject {
    private IDeviceWriter writer;
 
    public IDeviceWriter getWriter() {
        returnwriter;
    }
 
    publicvoid setWriter(IDeviceWriter writer) {
        this.writer = writer;
    }
 
    /**
     * 通用的保存业务方法
     */
    publicvoid save(){
        System.out.println("----开始调用业务组件BusinessObjectsave()方法....");
        writer.saveToDevice();
        System.out.println("----结束调用业务组件BusinessObjectsave()方法....");
    }
}
 
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:51:09
 * 客户端调用
 */
publicclass Client {
    publicstaticvoid main(String args[]){
        //构造两个组件对象
        IDeviceWriter floppyWriter=new FloppyWriter();
        IDeviceWriter usbWriter=new USBWriter();
 
        //构造两个业务对象
        BusinessObject businessObject1=new BusinessObject();
        BusinessObject businessObject2=new BusinessObject();
 
        //构造业务对象并执行通用的保存方法
        businessObject1.setWriter(floppyWriter);
        businessObject1.save();
 
        System.out.println();
 
        //构造业务对象并执行通用的保存方法
        businessObject2.setWriter(usbWriter);
        businessObject2.save();
    }
}
 
 
 
 
 
 
 
 
 
 
 
 
 
三、Iocconstructor
setterIDeviceWriterFloppyWriterUSBWriterBusinessObject
 
 
 
 
 
 
 
Client类修改为:
 
 
 
 
 
 
 
 
 
  
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:32:03
 * 可重用的业务逻辑
 */
publicclass BusinessObject {
    private IDeviceWriter writer;
 
    public BusinessObject() {
    }
 
    public BusinessObject(IDeviceWriter writer) {
        this.writer = writer;
    }
 
    public IDeviceWriter getWriter() {
        returnwriter;
    }
 
    publicvoid setWriter(IDeviceWriter writer) {
        this.writer = writer;
    }
 
    /**
     * 通用的保存业务方法
     */
    publicvoid save() {
        System.out.println("----开始调用业务组件BusinessObjectsave()方法....");
        writer.saveToDevice();
        System.out.println("----结束调用业务组件BusinessObjectsave()方法....");
    }
}
 
 
 
 
 
/**
 * Created by IntelliJ IDEA.
 * User: leizhimin
 * Date: 2007-9-25
 * Time: 11:35:52
 * 客户端调用
 */
publicclass Client {
    publicstaticvoid main(String args[]){
        //构造两个组件对象
        IDeviceWriter floppyWriter=new FloppyWriter();
        IDeviceWriter usbWriter=new USBWriter();
 
        //构造两个业务对象
        BusinessObject businessObject1=new BusinessObject(floppyWriter);
        BusinessObject businessObject2=new BusinessObject(usbWriter);
 
        //执行业务逻辑对象的保存方法
        businessObject1.save();
        System.out.println();
        businessObject2.save();
   }
}
 
 
 
两种实现方式执行的结果相同:
 
----开始调用业务组件BusinessObject的save()方法....
调用FloppyWriter.saveToDevice()方法: 保存到了Floppy设备上!
----结束调用业务组件BusinessObject的save()方法....
 
----开始调用业务组件BusinessObject的save()方法....
调用USBWriter.saveToDevice()方法: 保存到了USB设备上!
----结束调用业务组件BusinessObject的save()方法....
 
Process finished with exit code 0
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值