Ioc的推荐实现方式

Ioc的两种实现方式
 
Ioc(Inversion of Control)中文翻译为“控制反转”,Ioc的抽象概念是依赖关系转移,即“程序与实现必须依赖于抽象”。
 
控制反转最常见的实现方式就是依赖注入(Depedency Injection),依赖注入的含义是:保留抽象接口,让组件依赖抽象接口,当组件要与其他对象发生依赖关系时,通过抽象接口来注入依赖的实际对象。
 
在解说Ioc之前,先看一个设计的例子:
设计一个保存数据到软盘、USB设备的程序。
 
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

一、反面例子,没有使用Ioc

 

 

 

 

 

 

 
/**

 * Created by IntelliJ IDEA.

 * User: leizhimin

 * Date: <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2007-9-25

 * Time: 11:13:32

 * 

 * 

 */

public class FloppyWriter {

    public void saveToDevice() {

        System.out.println("FloppyWriter.saveToDevice(): Floppy!");

    }

}

 

 

 

 

 

 

 
/**

 * Created by IntelliJ IDEA.

 * User: leizhimin

 * Date: 2007-9-25

 * 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("----BusinessObjectsave()....");

        floppyWriter.saveToDevice();

        System.out.println("----BusinessObjectsave()....");

    }

}

 

 

 

 

 

 

 

 

 

 

 
/**

 * Created by IntelliJ IDEA.

 * User: leizhimin

 * Date: 2007-9-25

 * 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: 2007-9-25

 * Time: 11:38:32

 * 

 */

public interface IDeviceWriter {

    public void saveToDevice();

}

 

 

 

 

 
/**

 * Created by IntelliJ IDEA.

 * User: leizhimin

 * Date: 2007-9-25

 * 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: 2007-9-25

 * 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: 2007-9-25

 * 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("----BusinessObjectsave()....");

        writer.saveToDevice();

        System.out.println("----BusinessObjectsave()....");

    }

}

 

 

 

 

 

 
/**

 * Created by IntelliJ IDEA.

 * User: leizhimin

 * Date: 2007-9-25

 * 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=new BusinessObject();

 

        //

        businessObject1.setWriter(floppyWriter);

        businessObject1.save();

 

        System.out.println();

 

        //

        businessObject2.setWriter(usbWriter);

        businessObject2.save();

    }

}

 

 
 
 
 
 
 
 
 
 
 
 
 
三、Ioc的实现推荐实现方式:constructor方式

 
 
 
 
 
 
setter 方式基础上修改, IDeviceWriter FloppyWriter USBWriter 不变, BusinessObject
 
 
 
 
 
 
 
Client 类修改为:

 
 
 

 
 
 

 

 

 

  

 

 

 

/**

 * Created by IntelliJ IDEA.

 * User: leizhimin

 * Date: 2007-9-25

 * Time: 11:32:03

 * 

 */

public class BusinessObject {

    private IDeviceWriter writer;

 

    public BusinessObject() {

    }

 

    public BusinessObject(IDeviceWriter writer) {

        this.writer = writer;

    }

 

    public IDeviceWriter getWriter() {

        return writer;

    }

 

    public void setWriter(IDeviceWriter writer) {

        this.writer = writer;

    }

 

    /**

     * 

     */

    public void 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

 * 

 */

public class Client {

    public static void 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
 
 
参考资料:Spring技术手册
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值