Odin | База знаний 1С

Как в 1С реализоват...
 

Как в 1С реализовать паттерн проектирования Наблюдатель?


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Как в 1С можно реализовать паттерн проектирования Наблюдатель (observer design pattern)?



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Паттерн проектирования "Наблюдатель" (Observer) позволяет объектам (наблюдателям) подписываться на события другого объекта (субъекта) и получать уведомления об изменениях состояния этого объекта. В 1С этот паттерн можно реализовать с помощью событий и методов.

Вот пример реализации паттерна "Наблюдатель" в 1С:

1. **Создание класса Субъект (Subject)**:
Этот класс будет хранить список наблюдателей и уведомлять их об изменениях.

1C
// Класс Субъект
Класс Субъект
    Переменные:
        Наблюдатели;

    Процедура Инициализация()
        Наблюдатели = Новый СписокЗначений;
    КонецПроцедуры

    Процедура ДобавитьНаблюдателя(Наблюдатель)
        Наблюдатели.Добавить(Наблюдатель);
    КонецПроцедуры

    Процедура УдалитьНаблюдателя(Наблюдатель)
        Наблюдатели.Удалить(Наблюдатель);
    КонецПроцедуры

    Процедура УведомитьНаблюдателей()
        Для Каждого Наблюдатель Из Наблюдатели Цикл
            Наблюдатель.Обновить();
        КонецЦикла;
    КонецПроцедуры

    Процедура ИзменитьСостояние()
        // Логика изменения состояния
        УведомитьНаблюдателей();
    КонецПроцедуры
КонецКласса

2. **Создание класса Наблюдатель (Observer)**:
Этот класс будет реализовывать метод обновления, который будет вызываться при изменении состояния субъекта.

1C
// Класс Наблюдатель
Класс Наблюдатель
    Процедура Обновить()
        // Логика обновления состояния наблюдателя
        Сообщить("Состояние субъекта изменилось!");
    КонецПроцедуры
КонецКласса

3. **Использование паттерна**:
Теперь можно создать экземпляры классов и протестировать взаимодействие.

1C
// Пример использования
Процедура ПримерИспользования()
    Субъект = Новый Субъект();
    Наблюдатель1 = Новый Наблюдатель();
    Наблюдатель2 = Новый Наблюдатель();

    Субъект.ДобавитьНаблюдателя(Наблюдатель1);
    Субъект.ДобавитьНаблюдателя(Наблюдатель2);

    Субъект.ИзменитьСостояние(); // Уведомит всех наблюдателей
КонецПроцедуры

В этом примере класс `Субъект` управляет списком наблюдателей и уведомляет их об изменениях. Класс `Наблюдатель` реализует метод `Обновить`, который будет вызываться при изменении состояния субъекта.

Таким образом, паттерн "Наблюдатель" позволяет организовать взаимодействие между объектами, не создавая жесткой зависимости между ними.



   
ОтветитьЦитата