PureMVC学习系列-从源码深度剖析PureMVC(从PureMVC中看设计模式-Facade门面模式)

来源:互联网 发布:域名top有升值空间 编辑:程序博客网 时间:2024/06/05 09:40

程序的设计模式,早在上学时就已经开始接触,而且在后来进行开发,设计,架构系统时,才发现设计模式的最高境界,便是“大道至简”。在最开始学习设计模式时最容易犯的错便是自以为了解设计模式,一个简单得系统,生搬硬套设计模式。俗不知,程序本来就是实现一个功能,架构出来的最初的雏形,虽然不得不考虑扩展,维护等工作,但是,最大的目的还是有计划的实现功能,一个完美的系统,并不完全是一开始就设计的非常完美,还有就是后来的完美的重构,关于重构,今天不想谈论太多,重点是说设计模式,重点是欣赏PureMVC的设计模式的巧妙使用。

       pureMVC用的设计模式很多,在使用设计模式的时候,需要考虑的是,是否有必要来使用这个模式,第一步该考虑的是抽象,将系统,抽象成子系统,子系统抽象成模块,模块里再细化到接口,到类,然后绘制UML图,寻找出需要修改的点。所以设计模式应该是一边重构,一边考虑使用的。

       在使用PureMVC的时候,我们只需要写一句代码便可以完成所有的组件的初始化

        

[javascript] view plaincopyprint?
  1. var myFacade:MyFacade = MyFacade.getInstance();  

      其实这个就是门面(Facade)模式,顾名思义,门面模式就是一个复杂子系统的门面,因为在系统架构时,往往是越来越复杂,到最后提供给其他系统调用时,关系过于复杂,如果不加以简化,到最后,代码的可读性就会大大的降低。试想下,如果一个要调用一个子系统系统时,必须先弄清楚子系统的各个组件的关系,这样不仅是让开发痛苦不堪,而且很容易增加系统的耦合度!

     门面模式其实就是为了简化子系统的调用关系,一般Facade类都是用来协调和简化子系统中各个组件的复杂调用关系 ,降低系统间因为调用关系而导致的耦合度增加的问题。

     通常子系统如果有以下情况出现,就可以考虑门面模式:

     1.各个组件调用关系复杂,需要简化。

     2.子系统和其他子系统的依赖性较大,需要降低耦合度。

     3.需要增强子系统的独立性

 

套用阎宏老师《java 与设计模式》中的一个示例说明:

 

 

        上面这个示例说的时一个安保系统,一个安保系统包含了Camera,Light,Sensor,Alarm组件。

         如果没有SecurityFacade,则在其他系统调用时,必须对各个组件进行实例化调用,这无疑会增加开发的难度,其实Facade相当于是一个复杂机器的操作面板,你只需要再操作面板上按下开关,操作面板会接通各个线路,多个零件同时工作,如果没有操作面板,你得先打开录像机,再打开警告灯,再拉响警报,你事很容易在事件发生时忘掉其中的一件事,所以有了Facade你只需要按下系统开关即可完成所有的工作。

         PureMVC中也是这样,数一下,初始化的时候他初始化了Controller,View,Model,这么多工作如果没有Facade光写代码也会增加很大的麻烦,势必影响框架的调用难易度,而Facade不光是完成的这些简单得操作,仔细看下PureMVC中的Facade完成了哪些工作。

 

 

        试想下,如果没有Facade,我们需要做哪些工作,首先我们需要在系统调用PureMVC时,就需要创建Controller、Model和View的实例,分别执行各个组件的InitialXX方法,而且Facade不仅有对外简化调用的作用,而且它负责保存管理对各个组件的引用。其他组件在使用时不需要再次创建它们的实例,从Facade即可方便取得。

原创粉丝点击