База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С реализовать паттерн проектирования Наблюдатель? › RE: Как в 1С реализовать паттерн проектирования Наблюдатель?
Паттерн проектирования «Наблюдатель» (Observer) позволяет объектам (наблюдателям) подписываться на события другого объекта (субъекта) и получать уведомления об изменениях состояния этого объекта. В 1С этот паттерн можно реализовать с помощью событий и методов.
Вот пример реализации паттерна «Наблюдатель» в 1С:
1. **Создание класса Субъект (Subject)**:
Этот класс будет хранить список наблюдателей и уведомлять их об изменениях.
1C
// Класс Субъект
Класс Субъект
Переменные:
Наблюдатели;
Процедура Инициализация()
Наблюдатели = Новый СписокЗначений;
КонецПроцедуры
Процедура ДобавитьНаблюдателя(Наблюдатель)
Наблюдатели.Добавить(Наблюдатель);
КонецПроцедуры
Процедура УдалитьНаблюдателя(Наблюдатель)
Наблюдатели.Удалить(Наблюдатель);
КонецПроцедуры
Процедура УведомитьНаблюдателей()
Для Каждого Наблюдатель Из Наблюдатели Цикл
Наблюдатель.Обновить();
КонецЦикла;
КонецПроцедуры
Процедура ИзменитьСостояние()
// Логика изменения состояния
УведомитьНаблюдателей();
КонецПроцедуры
КонецКласса
2. **Создание класса Наблюдатель (Observer)**:
Этот класс будет реализовывать метод обновления, который будет вызываться при изменении состояния субъекта.
1C
// Класс Наблюдатель
Класс Наблюдатель
Процедура Обновить()
// Логика обновления состояния наблюдателя
Сообщить("Состояние субъекта изменилось!");
КонецПроцедуры
КонецКласса
3. **Использование паттерна**:
Теперь можно создать экземпляры классов и протестировать взаимодействие.
1C
// Пример использования
Процедура ПримерИспользования()
Субъект = Новый Субъект();
Наблюдатель1 = Новый Наблюдатель();
Наблюдатель2 = Новый Наблюдатель();
Субъект.ДобавитьНаблюдателя(Наблюдатель1);
Субъект.ДобавитьНаблюдателя(Наблюдатель2);
Субъект.ИзменитьСостояние(); // Уведомит всех наблюдателей
КонецПроцедуры
В этом примере класс `Субъект` управляет списком наблюдателей и уведомляет их об изменениях. Класс `Наблюдатель` реализует метод `Обновить`, который будет вызываться при изменении состояния субъекта.
Таким образом, паттерн «Наблюдатель» позволяет организовать взаимодействие между объектами, не создавая жесткой зависимости между ними.