Показать сообщение отдельно
Старый 27.11.2017, 18:04
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 17  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Цитата:
Сообщение от undefined Посмотреть сообщение
Код AS3:
Это как раз приватизация конструктора так сказать)
в чем смысл наличия флага isConstructing?
ну как...Там же все понятно вроде. Это приватная boolean переменная, которая может быть изменена только изнутри класса. По умолчанию она равна false.
Код AS3:
private static var _isConstructing:Boolean;
В конструкторе стоит её проверка, которая выдает ошибку при попытке создать экземпляр класса
Код AS3:
public function MySingleton() {
			if (!_isConstructing) throw new Error("Singleton, use MySingleton.instance");
		}
что и ограничивает создание конструктора извне класса, так как данную переменную изменить можно только изнутри. Что мы и делаем в геттере instance, единожды разрешая создание конструктора.

Код AS3:
public static function get instance():MySingleton {
			if (_instance == null)  {
				_isConstructing = true;
				_instance = new MySingleton();
				_isConstructing = false;
			}
			return _instance;
		}
причем данная операция выполняется только если переменная _instance не определена, если же экземпляр уже был создан, т1о мы просто возвращаем его, не трогая переменную _isConstructing, которая по прежнему, пребывая в false, ограничивает создание экземпляра данного класса извне.
__________________
while(live()) { hope(); }