Как правильно использовать шаблон наблюдателя? - PullRequest
0 голосов
/ 13 мая 2018

Я изучаю шаблоны проектирования. Но когда я изучал паттерн наблюдателя, у меня возник вопрос.

Обычно шаблон наблюдателя имеет следующие компоненты:

  • Тема: объект содержит некоторую информацию, полученную наблюдателем.
  • Наблюдатель: объект, который контролирует субъект. Когда происходят какие-либо события, субъект информирует наблюдателя.

Мой вопрос: почему Субъект обязан решить, когда вызывать наблюдателя. На моем сайте, я думаю, что условие должно быть выбрано наблюдателем.

Возьмите водонагреватель в качестве простого примера. Монитор температуры (наблюдатель) предупредит, когда температура достигнет 95. Поэтому я могу использовать следующий код для описания этой модели.

namespace Heater
{
     public class Heater{   // subject
          private int temperature;
          public delegate void BoilHandler(int para);
          public event BoilHandler BoilEvent;

          public void BoilWater(){
               for (int i = 0; i <= 100; i++)
               {
                    temperature = i;
                    if(temperature > 95){   //decide when to inform observer
                         BoilEvent(temperature);
                    }
               }
          }
     }

     public class Alarm{    // observer
          public void MakeAlert(int param){
               Console.WriteLine("ALarm: UP TO 95, NOW is {0}", param);
          }
     }
}

Итак, по схеме наблюдателя я отделяю сигнал тревоги от нагревателя. Реализация сигнализации зависит от клиента. Но когда я хочу изменить порог тревоги, я должен изменить код в классе Heater, а не в классе Alarm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...