База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С реализовать паттерн проектирования Наблюдатель? › RE: Как в 1С реализовать паттерн проектирования Наблюдатель?
 Odin — Одинэсник
Odin — ОдинэсникПаттерн проектирования «Наблюдатель» (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);     Субъект.ИзменитьСостояние(); // Уведомит всех наблюдателей КонецПроцедуры | 
В этом примере класс Субъект управляет списком наблюдателей и уведомляет их об изменениях. Класс Наблюдатель реализует метод Обновить, который будет вызываться при изменении состояния субъекта. 
Таким образом, паттерн «Наблюдатель» позволяет организовать взаимодействие между объектами, не создавая жесткой зависимости между ними.
