Swiftsuspenders2 是一个基于元数据(metadata)的IOC(控制反转,inversion of control)的AS3的解决方案。反转控制又被称依赖注射(Dependency Injection),也就是将依赖先剥离,然后在适当时候再注射进入。它是一种降低耦合度的程序设计模式其核心原则是高层模块不应依赖于低层模块,他们都应该依赖于抽象。抽象不依赖细节,细节依赖抽象,它通过将对象的创建过程解耦出来来降低对象间的依赖关系。IOC的设计目标是不直接创建对象,但是描述对象的创建方式,在代码中不直接链接对象和服务,通过配置的方式描述哪一种组件需要哪一些服务,然后在ioc容器中负责自动将对象服务和需要使用他们的地方进行链接。下面我们通过一个简单的例子,先了解一下如何利用依赖注入进行解耦。

关于依赖注入

当我们需要进行一个发送消息或者邮件的流程时 我们可能会写如下代码(demo0):

 1 package  demo0
 2 {
 3     /**
 4      * ...
 5      * @author titi
 6      */
 7     public class Mail 
 8     {
 9         public var Title:String;
10         
11         public function Send():void
12         {
13             trace(" Send Mail:"+Title);
14         }
15         
16         public function Mail(title:String) 
17         {
18             Title = title;
19         }
20         
21     }
22 
23   }
24   
25   
26 package  demo0
27 {
28     /**
29      * ...
30      * @author titi
31      */
32     public class Notification 
33     {
34         private var _email:Mail;
35         public function Notification() 
36         {
37             _email = new Mail("测试邮件1");
38         }
39         
40         
41         public function PromotionalNotification():void
42         {
43             _email.Send();
44         }
45     }
46 
47   }
48   
49   
50 package demo0
51 {
52     import flash.display.Sprite;
53     import flash.events.Event;
54     
55     /**
56      * ...
57      * @author titi
58      */
59     public class Main0 extends Sprite 
60     {
61         
62         public function Main0():void 
63         {
64             if (stage) init();
65             else addEventListener(Event.ADDED_TO_STAGE, init);
66         }
67         
68         private function init(e:Event = null):void 
69         {
70             removeEventListener(Event.ADDED_TO_STAGE, init);
71             // entry point
72             var notificatoin:Notification = new Notification();
73             notificatoin.PromotionalNotification();
74         }
75         
76     }
77     
78   }
View Code

相关文章: