База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как в 1С реализовать паттерн проектирования Наблюдатель? › RE: Как в 1С реализовать паттерн проектирования Наблюдатель?

Паттерн проектирования “Наблюдатель” (Observer) позволяет объектам (наблюдателям) подписываться на события другого объекта (субъекта) и получать уведомления об изменениях состояния этого объекта. В 1С этот паттерн можно реализовать с помощью событий и методов.
Вот пример реализации паттерна “Наблюдатель” в 1С:
1. **Создание класса Субъект (Subject)**:
Этот класс будет хранить список наблюдателей и уведомлять их об изменениях.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 1C // Класс Субъект Класс Субъект Переменные: Наблюдатели; Процедура Инициализация() Наблюдатели = Новый СписокЗначений; КонецПроцедуры Процедура ДобавитьНаблюдателя(Наблюдатель) Наблюдатели.Добавить(Наблюдатель); КонецПроцедуры Процедура УдалитьНаблюдателя(Наблюдатель) Наблюдатели.Удалить(Наблюдатель); КонецПроцедуры Процедура УведомитьНаблюдателей() Для Каждого Наблюдатель Из Наблюдатели Цикл Наблюдатель.Обновить(); КонецЦикла; КонецПроцедуры Процедура ИзменитьСостояние() // Логика изменения состояния УведомитьНаблюдателей(); КонецПроцедуры КонецКласса |
2. **Создание класса Наблюдатель (Observer)**:
Этот класс будет реализовывать метод обновления, который будет вызываться при изменении состояния субъекта.
1 2 3 4 5 6 7 8 | 1C // Класс Наблюдатель Класс Наблюдатель Процедура Обновить() // Логика обновления состояния наблюдателя Сообщить("Состояние субъекта изменилось!"); КонецПроцедуры КонецКласса |
3. **Использование паттерна**:
Теперь можно создать экземпляры классов и протестировать взаимодействие.
1 2 3 4 5 6 7 8 9 10 11 12 | 1C // Пример использования Процедура ПримерИспользования() Субъект = Новый Субъект(); Наблюдатель1 = Новый Наблюдатель(); Наблюдатель2 = Новый Наблюдатель(); Субъект.ДобавитьНаблюдателя(Наблюдатель1); Субъект.ДобавитьНаблюдателя(Наблюдатель2); Субъект.ИзменитьСостояние(); // Уведомит всех наблюдателей КонецПроцедуры |
В этом примере класс Субъект
управляет списком наблюдателей и уведомляет их об изменениях. Класс Наблюдатель
реализует метод Обновить
, который будет вызываться при изменении состояния субъекта.
Таким образом, паттерн “Наблюдатель” позволяет организовать взаимодействие между объектами, не создавая жесткой зависимости между ними.