ActionScript 3 Singleton实例化 - 建议

时间:2011-08-19 13:29:30

标签: actionscript-3 singleton instantiation

我有一个AS3单身人士:

package 
    {
        public class Singleton
        {
            public function Singleton(enforcer:SingletonEnforcer):void
            {
                if(!enforcer){throw new Error("Only one instance of Singleton Class allowed.");}
            }

            private static var _instance:Singleton;
            public static function getInstance():Singleton
            {
                if(!Singleton._instance)
                {
                    Singleton._instance=new Singleton(new SingletonEnforcer());
                }
                return Singleton._instance;
            }
        }
    }
class SingletonEnforcer{}

propfunc()分别视为Singleton类的属性和方法。

我应该如何访问它们?
1。使它们静止并使用它:

Singleton.getInstance();
Singleton.prop;
Singleton.func();


2。不要让它们静止并使用它:

Singleton.getInstance().prop;
Singleton.getInstance().func();

是否重要,还是只是视觉偏好?

谢谢。

1 个答案:

答案 0 :(得分:4)

原因使用单例实例是为了让你可以以(相对)静态的方式使用类成员。

我不会讨论是否在这里使用单身人士的问题,关于这是否是一个好的模式存在很长时间的争论。

通常,当使用单例时,您可以在局部变量中存储对它们的访问权限,并像使用任何其他类实例一样使用它们。主要区别在于,而不是使用:

foo = new Foo();

您使用:

foo = Foo.instance;
//Actionscript supports properties which makes this a self-initializing call
-or-
foo = Foo.getInstance();

其次是

foo.bar();
foo.baz();
foo.fizz = 'buzz';

这并不意味着Foo不能拥有该类的静态成员,但是在Singleton上添加静态成员的规则与将静态成员添加到任何其他相同>上课。如果函数属于实例,则应该在实例上使用它,如果它属于类,则它应该是静态的。