`
sooxin
  • 浏览: 259261 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【转载】浅谈 flash 中的设计模式:IoC

阅读更多
模式都是方法论,用于解决特定问题。产品开发过程中肯定遇到这样的问题:需求提过来,我开发;开发完毕之后需求人不满意,又提了新的需求,我又开发;完了还是不满意,需求再次被修改;这次提交后告诉我有些功能要拿掉;拿掉之后又告诉我,领导觉得那个功能挺好,还是加上来吧……于是我怒了,整了一份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(Inversion of Control,控制反转)容器是其核心组件,它负责管理和装配应用中的对象。在Spring源代码解析的第一部分,我们将聚焦于IOC容器,特别是BeanFactory接口,它是所有Spring容器的基础。 ...

    JAVA设计模式之IOC实战02

    JAVA设计模式之IOC实战02

    JAVA设计模式之IOC实战01

    JAVA设计模式之IOC实战01

    Spring源代码解析(二):IoC容器在Web容器中的启动.doc

    在Spring框架中,IoC(Inversion of Control)容器是核心组件,负责管理应用程序的bean。当我们在Web环境中运行Spring应用时,IoC容器需要在Web容器(如Tomcat、Jetty等)中启动并运行。这个过程涉及到一系列的初始...

    Spring基础:IoC容器(1)

    IoC(Inversion of Control),也称为控制反转,是一种设计模式,它将对象的创建和管理的责任从应用程序代码转移到外部容器,即Spring IoC容器。这样,代码不再直接创建对象,而是通过配置文件或注解来声明依赖关系...

    浅谈 Spring 原理 透析,ioc aop

    浅谈 Spring 原理 透析,IOC 和 AOP Spring 框架是一个从实际项目开发经验中抽取的,可高度重用的应用框架。它是一个轻量级容器,带有包装器,使许多不同的服务和框架更易于使用。轻量级容器接受任何 JavaBean,而...

    第四课:IOC容器设计理念与源码解读 (2)1

    本课程主要涵盖了IOC(Inversion of Control,控制反转)的核心理论以及实体Bean的创建方式,深入解析了Spring框架中的IOC设计原理。以下是对这些知识点的详细阐述: 1. **IOC理论概要** 在Java世界中,对象A如何...

    Spring中IoC优点与缺点解析

    IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 优点 1. 简化对象的创建:IoC ...

    Spring基础:IoC容器(2)

    IoC是一种设计模式,它的主要思想是反转对象创建和管理的控制权。在传统的编程中,对象通常自行创建和管理依赖对象,而在IoC中,这些职责被转移到了一个外部容器(如Spring的IoC容器)。容器根据配置信息创建对象,...

    工厂模式的IoC应用

    在软件工程中,控制反转(Inversion of Control,简称IoC)是一种设计原则,它将对象的创建和管理权从代码中剥离出来,交由一个外部容器负责。Spring框架是Java领域实现IoC的典型代表,通过依赖注入(Dependency ...

    Java EE设计模式:Spring企业级开发最佳实践

    Java EE 设计模式是指在 Java 企业版(Java Enterprise Edition)中应用的设计模式,旨在提高软件系统的可维护性、可扩展性和可重用性。Spring 是当前最流行的 Java EE 框架之一,广泛应用于企业级开发中。 在 Java...

    poco capsule ioc框架

    IoC的核心理念在于将控制权从应用程序转移到一个容器中,从而使程序的各个部分更加独立、灵活。 IoC通常与依赖注入(Dependency Injection,DI)紧密相关。依赖注入是一种实现IoC的具体方法,它允许我们在运行时...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    李建忠先生的“C#面向对象设计模式纵横谈”系列讲座,通过对不同设计模式的深入剖析,帮助开发者更好地理解和应用这些模式。在第25讲中,他集中对整个系列进行了一次全面的总结,让我们一起来回顾和探讨这些设计模式...

    Spring2.5.6源代码分析(一):IOC容器

    IoC是一种设计模式,它将对象的创建和管理从应用逻辑中解耦出来,由一个中心组件(如Spring的ApplicationContext)负责。在Spring中,这通常通过配置文件或注解来定义对象及其依赖关系。 Spring 2.5.6的IoC容器主要...

    Android应用开发中控制反转IoC设计模式使用教程

    【Android应用开发中控制反转IoC设计模式使用教程】 IoC(Inversion of Control,控制反转)是一种设计模式,常被称为依赖注入(Dependency Injection,DI)。在Android应用开发中,IoC模式能够显著降低组件之间的...

    IoC小例子(了解一下IoC设计模式入门)

    IoC设计模式的实现通常依赖于容器,如Spring框架在Java中就是一个著名的IoC容器。开发者可以通过XML配置、注解或者编程式的方式来定义对象及其依赖关系。例如,在Spring中,我们可以在XML配置文件中定义Bean(代表一...

    Android 设计模式 示例集合 以及IOC注解事例 Demo

    这个压缩包中的示例集合对于开发者来说是一个宝贵的资源,通过学习和实践这些示例,可以更好地理解和运用设计模式,同时掌握如何在Android项目中有效地使用IOC注解来管理依赖,提升代码的可维护性和可测试性。

    SpringIOC和AOP原理设计模式

    Spring框架的核心特性主要体现在Spring...总的来说,Spring框架的IOC和AOP是强大的工具,它们通过设计模式和创新的编程思想,解决了传统开发中的许多问题,使开发者能更专注于业务逻辑,从而提高了开发效率和软件质量。

    IoC容器的设计(利用反射、注解和工厂模式实现)

    1. 利用注解、反射和工厂模式设计一个简单的IoC容器 2. 该IoC容器包含3个注解和一个IoC容器类(AnnotationConfigApplicationContext),其定义如下: 注解 含义 @Component 标注Bean @Autowired 标注需要被注入的...

Global site tag (gtag.js) - Google Analytics