模式都是方法论,用于解决特定问题。产品开发过程中肯定遇到这样的问题:需求提过来,我开发;开发完毕之后需求人不满意,又提了新的需求,我又开发;完了还是不满意,需求再次被修改;这次提交后告诉我有些功能要拿掉;拿掉之后又告诉我,领导觉得那个功能挺好,还是加上来吧……于是我怒了,整了一份xml文档作为配置文件丢过去:功能如下,你丫自己装配——这,就叫IoC模式。
IoC全称Inversion of Control,即控制反转,也就是把对程序的控制移至程序之外,交由用户来控制。对于上面的这个例子,就是:作为开发者的我,理应控制程序所应实现的功能和方法,但由于需求的不可预期,我把对程序的控制权交给用户本人,由他们来选择装配,以实现最大的灵活性。IoC最好的例子应该就是java里面的spring了。IoC框架从xml中读取配置,在java里面利用反射的方法来实例化对象,再按照xml里规定的交互手段连接各个实例,就实现了控制反转。
这个模式的优势很明显,就是灵活,因为借助外力来反转控制,所以给程序轻松解耦,使得各个模块各干各的,彼此的依赖性降到最低。而缺点也很明显,增加开发工程量,程序员不得不将所有可能的需求都涵盖起来;控制反转所需的代价不小,性能的损失无法忽略。那么,什么时候使用它好呢?自然是对需求的预期不明确,程序很庞大而用户的覆盖面很广,所以为了照顾各种用户独特的需求必然要用一些手段来针对性的控制程序;还有就是,需要二次开发/加工的时候。
比如这次做3d产品展示,因为最终需求相对比较复杂,构成的功能模块很多,有些彼此独立,有些又交叉依赖;最终产品的维护和上线很可能不是我来做,所以就需要采用一种成熟的方法将这些需求细分。于是我想起来早先读到的IoC模式,继而寻求这种理论的指导,最终成功——这也验证了我之前对模式的描述:模式不是要学会弄透的,而是要程序员了解熟悉,当碰到问题的时候知道寻求怎样的解决。
不过可惜的是,flash(或称as3)无法完整支撑这个模式,因为编译的时候,没有明确声明的类不会被编译到swf中去,所以用反射的方法实例化行不通——当然我并没有使用成型的IoC框架,因为太复杂,所以这个说法未必准确——这样我就面临两个选择:第一,使用文档类的方式,将每个部件都发布成swf文件,然后通过运行时加载的方式来使用他们;第二,使用if else、switch case等语句来写死实例化内容。经过左右权衡之后我选择了第二种方式,因为短期内我的模块不会太多,功能会比较集中,写死不会太影响灵活性;其次,太多swf文件的部署非常困难,尤其是非本人部署的情况下,这点我深有体会。
flash里面无法执行IoC,但我们可以吸取其精神、精髓,运用到生产当中,解决问题。框架搭好之后,3d研究继续,互动的一章马上推出。
PS:上面对于模式和框架的理解均来自于我本人,可能和网上能查到的其他资料不符,也可能不够全面仔细准确,个人觉得领会精神无招胜有招最好,咔咔,望大家见谅。
分享到:
相关推荐
Spring源代码解析(一):IOC容器.doc
Spring源代码解析(二):IoC容器在Web容器中的启动.doc
JAVA设计模式之IOC实战02
JAVA设计模式之IOC实战01
浅谈 Spring 原理 透析,ioc aop
使用spring框架,工厂模式的IoC应用,非常简单的小例子。
1. IOC核知识点回顾 2. IOC 设计原理 1. Ioc理念概要 2. 实体Bean的创建 3. Bean的基本特性 4. 依赖注 2. 构造法注
NULL 博文链接:https://foreversky12.iteye.com/blog/2337247
NULL 博文链接:https://foreversky12.iteye.com/blog/2335949
Android 设计模式 示例集合 以及IOC注解事例 Demo
依赖注入:获得依赖对象的过程由自身管理变为了由IOC容器主动注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 AOP最多听到的就是面向切面编程,那对于这个名词,我第一次听到的时候也是不能...
NULL 博文链接:https://samsongbest.iteye.com/blog/1501710
IOC模式 c#经典例子 IOC 例子 IOC模式 c#经典例子 IOC 例子 IOC模式 c#经典例子 IOC 例子
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...
结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...
在本文中,我将深入探索这个模式的工作原理,给它一个更能描述其特点的名 字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator) 模式作一个比较。不过,这两者之间的差异并不太...
而代理是一种基本的设计模式,它是一种为了提供额外的或不同的操作而插入到真 实对象中的某个对象。而Java的动态代理在代理上更进一步,既能动态的创建代理对象,又能动态的调用代理 方法。Java的反射和动态代理机制...
Spring整体框架中的核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容在本源码中都有实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 能学到什么:IOC、AOP、代理、切面等都是如何...