Шаблон Singleton. Проблема

Опубликовал read-php в 30.07.2012 Категория: Генерация объектов ООП

Обычно в хорошо спроектированных системах экземпляры объектов передаются в виде параметров при вызове методов. При этом каждый класс сохраняет свою независимость от более широкого контекста и взаимодействует с другими частями системы через очевидные каналы коммуникации. Но иногда вы обнаружите, что это заставляет вас использовать некоторые классы как каналы передачи информации для объектов, которые не имеют к ним отношения, создавая зависимости во имя хорошего стиля проектирования.Рассмотрим в качестве примера класс Preferences, в котором хранятся данные, используемые в процессе выполнения приложения. Мы можем использовать объект Preferences для хранения таких параметров, как DSN-строки (т.е. строки, содержащие имена источников данных, в которых хранится информация о базе данных), корневые каталоги URL, пути к файлам и т.д. Очевидно, что подобная информация может меняться в зависимости от конкретной инсталляции. Данный объект может также использоваться как доска объявлений, или центр для сообщений, которые размещаются или извлекаются объектами системы, в других отношениях не связанными с ним.

Но передавать объект Preferences от одного объекта к другому— это не всегда хорошо. Многие классы, которые в других отношениях не используют этот объект, будут вынуждены принимать его просто для того, чтобы передать объектам, с которыми они работают. В результате получаем просто другой вид тесной связи.

Мы также должны быть уверены, что все объекты в нашей системе работают с одним и тем же объектом Preferences. Нам не нужна ситуация, когда объекты устанавливают значения на одном объекте, в то время как другие считывают данные с совершенно другого объекта.

Давайте выделим действующие факторы данной проблемы.

  • Объект Preferences должен быть доступен для любого объекта в системе.
  • Объект Preferences не должен сохраняться в глобальной переменной, значение которой может быть случайно запорчено.
  • В системе не должно быть больше одного объекта Preferences. Это означает, что объектУ устанавливает свойство в объекте Preferences, а объект Z извлекает то же самое свойство, причем они не связываются один с другим непосредственно (мы предполагаем, что оба объекта имеют доступ к объекту Preferences).

P.S. А для тех у кого уже болит голова от этих программных кодов советую немного отвлечься и поиграть во что то, к примеру, можно в онлайн игры война ну, или то что вам больше нравится.

Комментариев нет

Добавить комментарий