我有一个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{}
将prop
和func()
分别视为Singleton类的属性和方法。
我应该如何访问它们?
1。使它们静止并使用它:
Singleton.getInstance();
Singleton.prop;
Singleton.func();
2。不要让它们静止并使用它:
Singleton.getInstance().prop;
Singleton.getInstance().func();
是否重要,还是只是视觉偏好?
谢谢。
答案 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上添加静态成员的规则与将静态成员添加到任何其他相同>上课。如果函数属于实例,则应该在实例上使用它,如果它属于类,则它应该是静态的。