Chinaunix首页 | 论坛 | 博客
  • 博客访问: 873160
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 虚拟化

2012-04-04 16:55:19

前言 :

参加点部落的活动,关于IoC(控制反转)大家有很多的讨论。
本文排除对象生成的部份,单纯解释IoC为甚么叫做控制反转。
本篇文章以之前写的 [Object-oriented] : 重用内容来举例。

 

未IoC之前的对象图 :

很明显的
左边的组件A,相依右边的组件B。
左边的对象,相依右边的对象

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Robot
{
    private Car _car = null;
 
    public Robot(Car car)
    {
        _car = car;
    }
 
    public void Work()
    {
        _car.Run();
    }
}
 
public class Car
{
    public void Run()
    {
 
    }
}

 

IoC之后的对象图 :

很清楚的看到,组件A不再相依组件B。
反倒是组件B为了继承ICar接口,相依了组件A。(物件也是相依性反转)

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Robot
{
    private ICar _car = null;
 
    public Robot(ICar car)
    {
        _car = car;
    }
 
    public void Work()
    {
        _car.Run();
    }
}
 
public interface ICar
{
    void Run();
}
 
public class Car : ICar
{
    public void Run()
    {
 
    }
}

 

后记 :

由上面的范例来看,
很明显的对象的相依性方向改变了。
还有组件的相依性方向也改变了。

 

总的归纳起来。
狭义的说 : 在切割对象相依性的时候,可以采用IoC。
广义的说 : 在架构子系统或是应用层的时候,也可以采用IoC。
广广义的说 : ASP.NET把页面的内容,交由程序设计师去撰写,也是IoC的一种应用。
他是一种实现『切割相依性』、『重用上层,抽换下层』这些目的的模式。

 

IoC不是很新奇的技术,甚至跟各种面向对象技术、设计模式都有点部份重合。
但是主要是让我们在切割类别或是系统的时候,有个共同的名词。

 

另外补充,学习模式是用来帮助设计、分析跟学习。
学完了之后实际在工作上去实做, 等写到忘记这些模式名词,
并且可以组合出自己需要的模式,才算真的有到一个段落。
(怎么有点像倚天屠龙记的桥段...XD)

 

 

期許自己~
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。

阅读(595) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~