IoC 解释收集

全称是Inversion Of Control, 可译为反转控制,在软件开发技术中是一种通过容器管理对象约束关系。

控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,”不用你找,我来提供给你”,这就是控制反转的含义。

 

IOC type 3: (IoC的一种类型,以java示例)

  1. public class Girl{ 
  2.     private Kissable kissable; 
  3.     public Girl(Kissable kissable){ 
  4.         this.kissable = kissable; 
  5.     } 
  6.     public void kissYourKissable(){ 
  7.         kissable.kiss(); 
  8.     } 

这就是PicoContainer的组件,通过构造函数传递Boy给Girl 。

以下是的使用例子

  1. PicoContainer container = new DefaultPicoContainer(); 
  2. container.registerComponentImplementation(Boy.class); 
  3. container.registerComponentImplementation(Girl.class); 
  4. Girl girl = (Girl) container.getComponentInstance(Girl.class); 
  5. girl.kissYourKissable();

Martin Fowler在他的一篇文章中给IoC起了一个更为直观的名字:依赖注射DI(Dependency Injection)。下面先引入这个模式。

在设计模式中,我们已经习惯一种思维编程方式:Interface Driven Design 接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:

  1. InterfaceA a = new InterfaceAImp();

InterfaceAImp是接口InterfaceA的一个子类,IoC模式可以延缓接口的实现,根据需要实现,有个比喻:接口如同空的模型套,在必要时,需要向模型套注射石膏,这样才能成为一个模型实体,因此,我们将人为控制接口的实现称为注射。IoC模式是解决调用者和被调用者之间的一种关系,上述InterfaceA实现语句表明当前是在调用被调用者InterfaceAImp,由于被调用者名称写入了调用者的代码中,这产生了一个接口实现的原罪:彼此联系,调用者和被调用者有紧密联系,在UML中是用依赖 Dependency 表示。但是这种依赖在分离关注的思维下是不可忍耐的,必须切割,实现调用者和被调用者解耦,新的Ioc模式依赖注射 (Dependency Injection)模式由此产生了,也就是将依赖先剥离,然后在适当时候再注射进入。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值