Дизайн шаблона предложения - PullRequest
1 голос
/ 25 мая 2010

Ниже приводится постановка задачи.

Существует n номеров строк совпадения. Если происходит событие A, а затем в определенный период времени происходит событие B, я не поднимаю тревогу. но если B не происходит, то я должен поднять тревогу. Может быть несколько цепочек событий, которые определяют, поднять ли тревогу или нет.

Ответы [ 4 ]

5 голосов
/ 25 мая 2010

Шаблон состояния . У вас будет что-то вроде этого (с вашей точки зрения):

Когда происходит A, измените состояние на такое, где возникновение B сбрасывает состояние. Если B появляется в исходном состоянии, подайте сигнал тревоги.

Проверьте связанную статью, чтобы увидеть, как реализовать это поведение.

0 голосов
/ 25 мая 2010

Шаблон наблюдателя:

var observer = new Observer();
var eventA = new EventA();
var eventB = new EventB();

eventA.register(observer, function() {
    // set off alarm in N amount of time units
});
eventB.register(observer, function() {
    // reset alarm
});

Затем eventA и eventB вызовут notify() для всех зарегистрированных наблюдателей, что вызовет обратные вызовы для запуска обратного отсчета / сброса тревоги.

Код в псевдо-javascript. Если вы используете полный JavaScript, просто используйте setTimeout и clearTimeout в обратных вызовах.

Полагаю, я должен упомянуть, что паттерн Pub / Sub (подмножеством которого является Observer) также очень хорош.

0 голосов
/ 25 мая 2010

Ваша постановка проблемы относится к уровню программного модуля. Модуль обычно содержит много классов, и эти классы будут по-разному связаны друг с другом. Шаблоны предоставляют как взгляды на эти отношения, так и иногда советы о том, как можно добиться поведения, используя разные отношения между классами.

Вполне вероятно, что будет задействован какой-то конечный автомат, будь то простой конечный автомат, или шаблон объекта состояния, или интерпретатор правил, или процедурный автомат, созданный путем преобразования правил с использованием посетителя. ; то, вызваны ли состояния опросом источников данных или использованием наблюдателей, и может ли система быть составлена ​​из более простых конечных автоматов, или необходим какой-то планировщик для одновременного запуска множества машин, все зависит от большей детализации, чем то, что приведено в вашем посте. ,

0 голосов
/ 25 мая 2010

использование Шаблон наблюдателя

alt text

...