Синглтон Принудительные Классы? - PullRequest
0 голосов
/ 18 апреля 2011

Какова цель использования классов Singleton Enforced, и есть ли у кого-нибудь примеры того, как их создавать / использовать?

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

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Просто имейте в виду следующее. Синглтон не должен решать проблему отсутствия дизайна приложения и использоваться как глобальная точка входа. Единственное допустимое использование Sinltone гарантируется, если имеется только один экземпляр определенного класса (см. Также Multiton для контроля количества экземпляров).

Так что вам следует подумать дважды или даже больше, прежде чем принимать решение об использовании Синглтона. Стоит ли ограничивать количество экземпляров определенного класса? Что если будет более одного экземпляра - нарушит ли он модель домена или что-то в этом роде?

В любом случае не используйте синглтоны и статику для решения архитектурных задач, чтобы иметь глобальную точку входа. Используя Singltones, вы можете потратить много времени на рефакторинг своего приложения в будущем.

2 голосов
/ 18 апреля 2011

Цель шаблона Singleton - убедиться, что существует только один экземпляр какого-либо объекта.Обычно используется в flex для добавления Global State в проект.Другими словами, он позволяет вам выполнять такие действия, как задание и иметь доступ к глобальным переменным из любой точки вашего приложения.

package {

  [Bindable]
  public final class AppGlobals {

    public static var _instance:AppGlobals;

    public function AppGlobals( enforcer:SingletonEnforcer ){
      if( enforcer == null ){
        throw new Error( "You can only have one active instance of AppGlobals.");
      }
    }

    public static function getInstance():AppGlobals {
      if( _instance == null ) _instance = new AppGlobals( new SingletonEnforcer );
      return _instance;
    }

  }

}

class SingletonEnforcer {}

Чтобы использовать это, вы должны создать экземпляр AppGlobals на самом высоком уровне вашего приложения (main.mxml или любого другого верхнего уровня), выполнив что-то вроде этого:

private var _appGlobals:AppGlobals = AppGlobals.getInstance();

Затем в любом месте вашего приложения вы можете создать экземпляр AppGlobals таким же образом и получить доступ к глобальному состоянию.информации.

Чтобы ответить на вторую часть вашего вопроса, да, вы можете использовать это для настройки глобальных переменных сеанса в вашем приложении.Некоторые люди спорят о том, что это лучший способ подойти к этому (конечно, не идеальный для каждой конкретной ситуации), но я нашел это полезным.

Надеюсь, это поможет!

...