Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 ActionScript 3单例实例化-建议_Actionscript 3_Singleton_Instantiation - Fatal编程技术网

Actionscript 3 ActionScript 3单例实例化-建议

Actionscript 3 ActionScript 3单例实例化-建议,actionscript-3,singleton,instantiation,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.");}

我有一个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();
这有关系吗,还是只是视觉上的预参考

谢谢。

使用单例实例的原因是,您可以(相对)静态地使用类成员

我不会在这里讨论是否使用单例的争论,关于它是否是一个好的模式有一个很长的争论

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

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
不能有类的静态成员,但是在单例上添加静态成员的规则与在任何其他类中添加静态成员的规则相同。如果函数属于实例,则应在实例上使用;如果函数属于类,则应为静态。

使用单例实例的原因是,您可以(相对)静态地使用类成员

我不会在这里讨论是否使用单例的争论,关于它是否是一个好的模式有一个很长的争论

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

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
不能有类的静态成员,但是在单例上添加静态成员的规则与在任何其他类中添加静态成员的规则相同。如果函数属于实例,则应在实例上使用;如果函数属于类,则应为静态。

您也可以使用
Foo.getInstance().bar()
而不是创建对单例的引用。如果在给定的类中只使用一次singleton,这可能会更好,因为它消除了在将来某个时候清理其他引用的顾虑就像我对其他类一样,对吗?ShanneTheat:我使用它访问数据库。我只想要
Foo.getInstance().getAllPersons()
等(同步)@shannetheat,如果我不使用单例,我会在使用
(新的Foo()).bar()的地方使用
Foo.getInstance().bar()
。为了保持一致性,我更喜欢使用
foo=foo.getInstance()
,尤其是在我想改用其他对象(或者可能是子类)的情况下。如果你指定了一个局部变量,你只需要改变一个类名的实例,而不是改变调用everywhere@zzzzBov-绝对可以,我就像你说的10的9倍。我只是想澄清一下,替代方法确实有效。您也可以使用
Foo.getInstance().bar()
,而不是创建对单例的引用。如果在给定的类中只使用一次singleton,这可能会更好,因为它消除了在将来某个时候清理其他引用的顾虑就像我对其他类一样,对吗?ShanneTheat:我使用它访问数据库。我只想要
Foo.getInstance().getAllPersons()
等(同步)@shannetheat,如果我不使用单例,我会在使用
(新的Foo()).bar()的地方使用
Foo.getInstance().bar()
。为了保持一致性,我更喜欢使用
foo=foo.getInstance()
,尤其是在我想改用其他对象(或者可能是子类)的情况下。如果你指定了一个局部变量,你只需要改变一个类名的实例,而不是改变调用everywhere@zzzzBov-绝对可以,我就像你说的10的9倍。我只是想说明,替代方案确实有效。