Я изучаю шаблоны проектирования. Но когда я изучал паттерн наблюдателя, у меня возник вопрос.
Обычно шаблон наблюдателя имеет следующие компоненты:
- Тема: объект содержит некоторую информацию, полученную наблюдателем.
- Наблюдатель: объект, который контролирует субъект. Когда происходят какие-либо события, субъект информирует наблюдателя.
Мой вопрос: почему Субъект обязан решить, когда вызывать наблюдателя. На моем сайте, я думаю, что условие должно быть выбрано наблюдателем.
Возьмите водонагреватель в качестве простого примера. Монитор температуры (наблюдатель) предупредит, когда температура достигнет 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.