Inversion of Control(IoC)控制反转

先概括一下Inversion of Control控制反转:是一种设计模式,在依赖关系上进行倒转。具体的体现有“应用程序不应依赖于容器,而是容器服务于应用程序”。

 

根据Martin Fowler的理解,IoC其实就是框架(framework)和库(library)的区别。库实际意义上就是一系列可用的方法函数,而框架则定义了一些设计模式,比如有如下的ruby代码

  #ruby
  puts 'What is your name?'
  name = gets
  process_name(name)
  puts 'What is your quest?'
  quest = gets
  process_quest(quest)

在这里,控制是在这段主程序代码里面进行的(程序员的这段程序拥有代码的控制权),什么时候问问题,什么时候输入,都是由程序员写的这段程序来决定的。而看下面一段代码

  require 'tk'
  root = TkRoot.new()
  name_label = TkLabel.new() {text "What is Your Name?"}
  name_label.pack
  name = TkEntry.new(root).pack
  name.bind("FocusOut") {process_name(name)}
  quest_label = TkLabel.new() {text "What is Your Quest?"}
  quest_label.pack
  quest = TkEntry.new(root).pack
  quest.bind("FocusOut") {process_quest(quest)}
  Tk.mainloop()

这里,框架提供了bind的接口,让程序员把方法调用传给框架,而具体何时调用,是由框架来通知程序的。这样一来,其实就是对于程序控制的反转。

在其他例子里面,比如C#的按钮,可以让程序员注册回调函数监听事件,在触发事件(比如按钮被点击)的时候,被注册的回调函数就会被调用,在这个意义理解,程序代码从“主动”变成了“被动”。这种IoC的特性,其实也是框架提供的设计模式。

 

Martin Fowler关于IoC的文章:

http://martinfowler.com/bliki/InversionOfControl.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值