【设计模式】控制反转(Inversion of control)

Inversion of control

以下文章参考了 IoC 提出和倡导者 Martin Fowler 的博客

所需前置知识:OOP,Java SE

在软件工程中,IoC (Inversion of control) 是一种设计模式,这也是一种很宽泛的概念。

IoC in GUI framework

martinfowler - Inversion of control

在 TUI framework 中,如果需要用户输入,你的 app code,即 myfunc() 必须去主动调用 input() 好让用户输入,即 app code 控制 framework。而 GUI framework 中,你只需要写好 onclick="myfunc()",定义好 myfunc(),当用户输入完后点击按钮,framework 就会自动调用 myfunc(),即 framework 控制 app code。

在上述过程中,控制权反转了,所以我们称这种情况称为 IoC。虽然这个概念起源于 GUI 中,但是 GUI 以 Event-driven programing 为主,而 IoC 则多用在 Web application framework。
在这里插入图片描述

IoC in Web application framework

把 IoC 用在 Web application framework (Java) 中,在不实现 IoC 时,产生对象需要使用 new,例如 Bean mybean = new Bean(),这个 Bean 的产生和销毁(即生命周期)都需要我们手动管理,即 app code 控制 framework,如果实现了 IoC,我们则可以调用 Bean mybean = Container.get(MyBean.class) 来获取对象,生命周期也由 Container 控制,即 framework 控制 app code。

IoC and Event-driven programing

IoC 容易和 Event-driven 搞混,所以有以下区别

  • 控制流:Event-driven 是通过事件来控制程序的执行,而 IoC 是通过外部容器来控制组件之间的依赖关系和生命周期。
  • 耦合度:Event-driven 通过事件归约耦合,而 IoC 通过外部化依赖来实现松耦合。
  • 实现方式:Event-driven 关注事件及其处理,IoC 则关注组件的装配和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值