Должны ли конструкторы подклассов быть приватными при реализации синглтона?

Доброго времени!

Есть классический singleton-класс. От него наследуются другие классы. Вопрос: должны ли эти классы точно так же реализовывать логику паттерна (т.е. через getInstance), или их-то как раз можно создавать классическим образом через new? Есть ли какие-либо рекомендации на этот счет, или паттерн можно применять по необходимости даже в подклассах?

Как вариант, корректен ли и хорош ли с точки зрения чистоты и красоты программирования создать в родительском классе переменные по типу инстанса:
public static $_controller;
...и после, создавать их в наследуемом классе:
parent::$_controller = new self;
Чтобы таким образом иметь экземпляры подклассов, сконцентрированных в едином главном классе?

Буду благодарен за советы и рекомендации, спасибо.
  • Вопрос задан
  • 2490 просмотров
Решения вопроса 1
Heian
@Heian Автор вопроса
Ашот
Как выяснилось годом позже, речь шла о разновидности Dependency Injection, и по факту к синглтону вопрос не имел отношения.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Эммм.. Классический синглтон не может быть отнаследован. У него приватный конструктор. Разве нет? habrahabr.ru/post/31375
Ответ написан
@DancingOnWater
Есть классический singleton-класс. От него наследуются другие классы. Вопрос: должны ли эти классы точно так же реализовывать логику паттерна (т.е. через getInstance), или их-то как раз можно создавать классическим образом через new?

Если вы наследуетесь от синглетона, значит вы хотите. чтоб эти классы были тоже синглетонами. Тогда ответ очевиден - да.
Если же вы не хотите, чтоб классы были синглетонами, значит вам не надо наследоваться и тогда ответ -нет.

Как вариант, корректен ли и хорош ли с точки зрения чистоты и красоты программирования создать в родительском классе переменные по типу инстанса:
public static $_controller;
...и после, создавать их в наследуемом классе:
parent::$_controller = new self;
Чтобы таким образом иметь экземпляры подклассов, сконцентрированных в едином главном классе?

Буду благодарен за советы и рекомендации, спасибо.

Похоже вы хотите что-то страшное. Поясняю.
Обычно в ООП программировании программа строится на классах, имеющие несколько экземпляров. Этим достигается инкапсуляция, повторное использование кода и потокобезопасность. Синглетон, с одной стороны, это обычный класс, но имеющий на всю программу один экземпляр.
Чрезмерное их количество легко нарушит инкапсулированность, создаст проблемы в многопоточности и повторном использовании кода, дальше все будет только хуже.
Ответ написан
@asd111
По моему в вашем случае лучше сделать protected static controller чтобы он был недоступен для ненаследников и писать self::controller=new self() тогда ваш родитель будет как интерфейс а наследники будут его реализовывать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы