Я хочу определить базовый тип Singleton, из которого пользователь будет извлекать свои классы, поэтому я подумал:
interface SingletonInterface {
public static function getInstance();
}
abstract class SingletonAbstract implements SingletonInterface {
abstract protected function __construct();
final private function __clone() {}
}
Но, используя этот подход, пользователь может реализовать этот синглтон ...
class BadImpl implements SingletonInterface {
public static function getInstance() {
return new self;
}
}
Каким был бы твой подход?