Laan's steps..

Feed Rss

flash单例模式

10.16.2008, flash, flex, by .

1: 以前用as2的时候很方便, 把构造函数写为private就可以了

public class A {
private function A() {
//===================…
}

private static var instance:A;
public static function getInst():A {
if (!instance) instance = new A();
return instance;
}
}

不过这样好像继承起来就不方便了,不过既然是单例,也应该就不要继承了。这个我就不太了解了。不过通常我是不会有继承出现。

然后过度到as3,呵呵, 构造函数竟然都不能写为private了
不过还有别的办法

2:应用异常,如果该类唯一实例存在,那就抛出异常来终止初始化。
public class A {
public function A() {
if(instance) {
throw (new Error(‘Please get the singleton instance of class A by A.getInst() method.’));
}
}

private static var instance:A;
public static function getInst():A {
if (!instance) instance = new A();
return instance;
}
}
这样做好像并不好。毕竟人家是一个简单初始化,你却给人家一个恶心的异常。

3:再就是使用闭包的特性

package {
      public class A{
       private static var _instance:A;
       public function A(enforcer:SingletonEnforcer) {}

       public static function getInstance():A{
          A._instance = new A(new SingletonEnforcer());
          return A._instance;
        }
     }
  }

  class SingletonEnforcer {}

这个方法好像是最好,呵呵 我喜欢。另外还有很多方法啊。比如判断初始化来源。
呵呵 最重要的是知道有这么一个模式并且该应用的时候能灵活应用就可以了。
呵呵 OK?

flash单例模式 有 2 条回应

  1. 完全错误的实现!误人子弟!

    回复
  2. @匿名
    恩,不至于吧?

    回复

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>