вторник, 27 октября 2009 г.

Singleton в Action Script 3

С появлением Action Script 3 кое какой код на предыдущей версии перестанет работать: например реализация синглтона, тк в AS2 конструктор можно было объявлять приватным.

Решение для AS3:

namespace some.project {
public class SomeClass {
private static var _instance:SomeClass = null;

public function SomeClass(PrivateClass pc) {
}

public static function get instance():SomeClass {
if (_instance == null) {
_instance = new SomeClass(new PrivateClass);
}
return _instance;
}
}
}

class PrivateClass {}


что бы не писать подобное:

public class SomeClass {
private static var _instance:SomeClass = null;
private static var flag:Boolean = false;

public function SomeClass() {
if (! flag) {
throw new Error("This is singleton");
}
}

public static function get instance():SomeClass {
if (_instance == null) {
flag = true;
_instance = new SomeClass();
}

return _instance;
}
}


Фишка в том что в первом случае компилятор нам не даст сделать

var obj:SomeObject = new SomeObject(...);

тк для создания объекта требуется объект класса PrivateClass. Класс виден только в том же файле что и SomeObject.

Во-втором случае все будет хорошо и о проблеме мы узнаем только во время работы "аппликации".

ух ты

У мну теперь есть свой блог :)