當前位置:
首頁 >
Ioc的推荐实现方式
發(fā)布時間:2025/3/19
28
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Ioc的推荐实现方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Ioc(Inversion of Control)中文翻譯為“控制反轉”,Ioc的抽象概念是依賴關系轉移,即“程序與實現必須依賴于抽象”。 控制反轉最常見的實現方式就是依賴注入(Depedency Injection),依賴注入的含義是:保留抽象接口,讓組件依賴抽象接口,當組件要與其他對象發(fā)生依賴關系時,通過抽象接口來注入依賴的實際對象。 在解說Ioc之前,先看一個設計的例子:
設計一個保存數據到軟盤、USB設備的程序。 ? 一、反面例子,沒有使用Ioc ? /** * Created by IntelliJ IDEA. * User: leizhimin * Date: 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(); ? ??} } ? 兩種實現方式執(zhí)行的結果相同: ----開始調用業(yè)務組件BusinessObject的save()方法....
調用FloppyWriter.saveToDevice()方法: 保存到了Floppy設備上!
----結束調用業(yè)務組件BusinessObject的save()方法.... ----開始調用業(yè)務組件BusinessObject的save()方法....
調用USBWriter.saveToDevice()方法: 保存到了USB設備上!
----結束調用業(yè)務組件BusinessObject的save()方法.... Process finished with exit code 0
本文轉自 leizhimin 51CTO博客,原文鏈接:http://blog.51cto.com/lavasoft/43900,如需轉載請自行聯系原作者
與50位技術專家面對面20年技術見證,附贈技術全景圖
設計一個保存數據到軟盤、USB設備的程序。 ? 一、反面例子,沒有使用Ioc ? /** * Created by IntelliJ IDEA. * User: leizhimin * Date: 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(); ? ??} } ? 兩種實現方式執(zhí)行的結果相同: ----開始調用業(yè)務組件BusinessObject的save()方法....
調用FloppyWriter.saveToDevice()方法: 保存到了Floppy設備上!
----結束調用業(yè)務組件BusinessObject的save()方法.... ----開始調用業(yè)務組件BusinessObject的save()方法....
調用USBWriter.saveToDevice()方法: 保存到了USB設備上!
----結束調用業(yè)務組件BusinessObject的save()方法.... Process finished with exit code 0
本文轉自 leizhimin 51CTO博客,原文鏈接:http://blog.51cto.com/lavasoft/43900,如需轉載請自行聯系原作者
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的Ioc的推荐实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux基础,文件目录管理,cd、rm
- 下一篇: phpcms列表页调用 点击量