Решение для 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.
Во-втором случае все будет хорошо и о проблеме мы узнаем только во время работы "аппликации".