StUV
Rotaredom
Наследование абстрактного синглетона - нормально или изврат ?..
Привет всем.
Соорудил примерно такую конструкцию:
Общий смысл - "унифицированное" получение инстанса юзера в зависимости от переменных в сессии:
Пытался перепроектировать используя фабрику или реестр - ничего настолько же простого не получилось.
Сам никаких граблей пока не нашел, но есть сомнения на "уровне интуиции" =)
Можно ли считать такое решение "имеющим право на жизнь" ?..
Спасибо.
Привет всем.
Соорудил примерно такую конструкцию:
PHP:
abstract class User
{
static protected $_instance;
protected $_userInfo;
...
protected function __construct()
{
...
}
static public function getInstance()
{
if (!isset(self::$_instance))
{
try
{
$userInfo = PhpSession::getInstance()->loadObject(Config::SESSION_USER_NAME);
self::$_instance = new User_Registered();
$this->_userInfo = $userInfo;
}
catch (PhpSession_Exception $e)
{
self::$_instance = new User_Unregistered();
}
}
return self::$_instance;
}
abstract public function isRegistered();
}
class User_Registered extends User
{
protected function __construct()
{
parent::__construct();
}
public function isRegistered()
{
return true;
}
...
}
class User_Unregistered extends User
{
protected function __construct()
{
parent::__construct();
}
public function isRegistered()
{
return false;
}
...
}
PHP:
$user = User::getInstance();
// далее $user передается в объекты, использующие интерфейс абстрактного User'a, не зная о том, зарегистрирован он или нет
Сам никаких граблей пока не нашел, но есть сомнения на "уровне интуиции" =)
Можно ли считать такое решение "имеющим право на жизнь" ?..
Спасибо.