AS3设计模式-创建模式-单例

Above all be of single aim;have a legitimate and useful purpose,and devote youself unreservedly to it.---James Alen

最重要的是单一的目标,有一个合法的和有用的目的,并毫无保留地奉献自己给它。

两个关键概念:

任何时候只能有一个类的实例被创建;一个类只能有一个,全局的访问点。

单例的一个基本条件,是类的构造器必须私有,以保证只能通过getInstance()方法获取唯一的实例。对于有些由于 是允许类的构造方法私有,例如java。但是在AS中,类的构造方法是不能私有的。

因为要做出一些变通,以达到类的构造方法私有的目标。

Singleton.as
 1 package  
 2 {
 3     /**
 4      * ...
 5      * @author liuyong
 6      */
 7     public class Singleton 
 8     {
 9         private static var singleton:Singleton;
10         public function Singleton(privateClass:PrivateClass) 
11         {
12             
13         }
14         public static function getInstance():Singleton {
15             if (Singleton.singleton == null) {
16                 Singleton.singleton = new Singleton(new PrivateClass);
17                 trace("Singleton instantiated");
18             }else {
19                 trace("sorry- already have a singleton instantiated");
20             }
21             return Singleton.singleton;
22         }
23         
24     }
25 
26 }
27 Class PrivateClass {
28     public function PrivateClass(){trace("privateClass is up")}
29     }

此时不能通过  new Singleton()创建实例。因为需要一个private Class 参数 ,由于PrivateClass是内部类,因为外部也访问不到 ,因此参数也传递不过去,此时只能通过getInstance()获取实例。

三个使用场景: feedback反馈信息。音乐播放器,一次只能播放一个音乐文件。购物车。

单例模式不能被过度使用,仅仅当需要只有一份实例,或者一个入口的时候才考虑使用单例。因为单例可能会影响灵活性和重用性。

补充:单例的实现方式可以有很多种,可以使用内部Class的形式,同事也可以定义私有的静态变量,去标记是否实例化过。例如:private static var _lock:Boolean;

posted @ 2013-03-30 16:47  YonguiL.偲袅  阅读(359)  评论(0编辑  收藏  举报