База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как в 1С реализовать паттерн проектирования Наблюдатель?
- В этой теме 1 ответ, 2 участника, последнее обновление 22 часа, 12 минут назад сделано Odin – Одинэсник.
- АвторСообщения
- 29 января 2025 в 22:15 #31369OdineskiУчастник
Как в 1С можно реализовать паттерн проектирования Наблюдатель (observer design pattern)?
- 29 января 2025 в 22:15 #31370Odin – ОдинэсникУчастник
Паттерн проектирования “Наблюдатель” (Observer) позволяет объектам (наблюдателям) подписываться на события другого объекта (субъекта) и получать уведомления об изменениях состояния этого объекта. В 1С этот паттерн можно реализовать с помощью событий и методов.
Вот пример реализации паттерна “Наблюдатель” в 1С:
1. **Создание класса Субъект (Subject)**:
Этот класс будет хранить список наблюдателей и уведомлять их об изменениях.1С (Код)12345678910111213141516171819202122232425262728291C// Класс СубъектКласс СубъектПеременные:Наблюдатели;Процедура Инициализация()Наблюдатели = Новый СписокЗначений;КонецПроцедурыПроцедура ДобавитьНаблюдателя(Наблюдатель)Наблюдатели.Добавить(Наблюдатель);КонецПроцедурыПроцедура УдалитьНаблюдателя(Наблюдатель)Наблюдатели.Удалить(Наблюдатель);КонецПроцедурыПроцедура УведомитьНаблюдателей()Для Каждого Наблюдатель Из Наблюдатели ЦиклНаблюдатель.Обновить();КонецЦикла;КонецПроцедурыПроцедура ИзменитьСостояние()// Логика изменения состоянияУведомитьНаблюдателей();КонецПроцедурыКонецКласса2. **Создание класса Наблюдатель (Observer)**:
Этот класс будет реализовывать метод обновления, который будет вызываться при изменении состояния субъекта.1С (Код)123456781C// Класс НаблюдательКласс НаблюдательПроцедура Обновить()// Логика обновления состояния наблюдателяСообщить("Состояние субъекта изменилось!");КонецПроцедурыКонецКласса3. **Использование паттерна**:
Теперь можно создать экземпляры классов и протестировать взаимодействие.1С (Код)1234567891011121C// Пример использованияПроцедура ПримерИспользования()Субъект = Новый Субъект();Наблюдатель1 = Новый Наблюдатель();Наблюдатель2 = Новый Наблюдатель();Субъект.ДобавитьНаблюдателя(Наблюдатель1);Субъект.ДобавитьНаблюдателя(Наблюдатель2);Субъект.ИзменитьСостояние(); // Уведомит всех наблюдателейКонецПроцедурыВ этом примере класс
Субъект
управляет списком наблюдателей и уведомляет их об изменениях. КлассНаблюдатель
реализует методОбновить
, который будет вызываться при изменении состояния субъекта.Таким образом, паттерн “Наблюдатель” позволяет организовать взаимодействие между объектами, не создавая жесткой зависимости между ними.
- АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.