Экземпляр ActionScript 3 Singleton - совет - PullRequest
0 голосов
/ 19 августа 2011

У меня есть AS3 Singleton:

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();

Имеет ли это значение или это просто визуальное предпочтение?

Спасибо.

1 Ответ

4 голосов
/ 19 августа 2011

причина использования одноэлементного экземпляра заключается в том, что вы можете использовать членов класса (относительно) статически.

Я не буду вдаваться в аргументыиз-за того, использовать здесь или нет одиночный файл, очень долго спорят о том, является ли это хорошим шаблоном или нет.

Как правило, когда используются синглтоны, доступ к ним сохраняется в локальной переменной ииспользуйте их как любой другой экземпляр класса.Основное отличие состоит в том, чтобы вместо:

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 одинаковы для добавления статических членов в любой другой класс .Если функция принадлежит экземпляру, она должна использоваться в экземпляре, если она принадлежит классу, она должна быть статической.

...