锁定老帖子 主题:研磨设计模式之工厂方法模式-4
精华帖 (1) :: 良好帖 (0) :: 新手帖 (18) :: 隐藏帖 (0)
|
|||||
---|---|---|---|---|---|
作者 | 正文 | ||||
发表时间:2010-06-17
最后修改:2010-12-16
3.2 工厂方法模式与IoC/DI IoC——Inversion of Control 控制反转
下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了。 一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。
当然是某个对象依赖于IoC/DI的容器 对象需要IoC/DI的容器来提供对象需要的外部资源 很明显是IoC/DI的容器 注入 某个对象 就是注入某个对象所需要的外部资源 当然是IoC/DI的容器来控制对象了 主要是控制对象实例的创建 反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。
当有了IoC/DI的容器后,A类不再主动去创建C了,如图8所示:
其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。
接口C的示例代码如下:
从上面的示例代码可以看出,现在在A里面写代码的时候,凡是碰到了需要外部资源,那么就提供注入的途径,要求从外部注入,自己只管使用这些对象。
子类的示例代码如下:
C1接口和前面C接口是一样的,C2这个实现类也是空的,只是演示一下,因此就不去展示它们的代码了。
未完待续...... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||
返回顶楼 | |||||
发表时间:2010-06-17
一直未对工厂模式的精髓没用捉摸透
非常感谢楼主精彩的这么一课! |
|||||
返回顶楼 | |||||
发表时间:2010-06-17
还是多看看别人写的吧,不要花时间自己发明轮子了。
至少补上【反射】吧。 或者介绍一下时下流行的【依赖注入】,算是更高级的【工厂方法】。 |
|||||
返回顶楼 | |||||
发表时间:2010-06-20
IoC/DI的内容讲得真是不错,原来工厂方法跟IoC/DI还有如此的关系,学习了.
另外,这不就是时下流行的【依赖注入】吗,楼上为何建议介绍这个呢? |
|||||
返回顶楼 | |||||
发表时间:2010-06-20
一直在找这方面的内容,写得很好.
连着把工厂方法模式1---5都看了,真的很不错,不愧是十年的"老人",功力深厚,佩服 |
|||||
返回顶楼 | |||||
发表时间:2010-06-24
To 2 楼的 TonyLian兄弟:
估计是看到的刚开始还不会排格式时候的内容,那个时候的内容还没有发到IoC/DI,也就是老兄说的依赖注入了。 另外,对于反射,准备写到简单工厂里面,其实是反射+配置文件来实现不修改代码就可以动态实现创建接口对象的功能,后面有机会再发上来 |
|||||
返回顶楼 | |||||
发表时间:2010-06-25
看不出来有什么关系阿?
IOC只管资源/对象注入的阿,工厂管创建。 |
|||||
返回顶楼 | |||||
发表时间:2010-06-25
6楼的朋友,IoC/DI在注入之前,难道不创建对象实例吗?要不然它拿什么注入呢
|
|||||
返回顶楼 | |||||
发表时间:2010-06-25
如果方法名能做到见名知意就好了,既然都写了那么多字,何必偷这一点懒呢?
|
|||||
返回顶楼 | |||||
发表时间:2010-06-27
楼主写得非常好 ,通俗易懂,在实际工作中最经常用到的,有时可能会加上配置文件来实现 。
|
|||||
返回顶楼 | |||||