2010-05-25 3 views
1

Voici l'énoncé du problème.Suggestion de motif de conception

Il y a n nombres de chaînes de correspondance, Si l'événement A se produit et que l'événement B se produit alors pendant une certaine période, je ne déclenche pas d'alarme. mais si B ne se produit pas, je dois déclencher l'alarme. Il peut y avoir plusieurs chaînes d'événements qui définissent si l'alarme doit être déclenchée ou non.

+3

devoirs? ...... –

+0

pas que cela importe, mais - quelle est la langue de choix? et que signifie "n nombres de chaînes de correspondance" – Bozho

Répondre

-1

utilisation Observer Pattern

alt text

+0

au moins expliquer ce que le modèle a à voir avec l'instruction –

5

Le State pattern. Vous aurez quelque chose comme ceci (de votre point de vue):

Quand A se produit, changez l'état en tel, où l'occurrence de B réinitialise l'état. Si B apparaît dans l'état initial, déclenchez l'alarme.

Vérifiez l'article lié pour voir comment implémenter ce comportement.

+0

Votre explication ressemble plus à une machine d'état procédural que le modèle d'état OO - définissant une variable int à 1. (il ne correspond pas non plus aux règles de l'OP) –

+0

"one" = "l'état" dans mon explication :) (ou "to one" = "to such"). Edité pour plus de clarté. – Bozho

+0

Le motif d'objet d'état est que l'état (A s'est produit) gère la transition. Il n'y a pas de condition de «réinitialisation de l'état» ou de «si» qui teste si c'est l'état initial lorsque B se produit. –

0

Votre déclaration de problème est pour quelque chose comme le niveau d'un module logiciel. Un module contiendra généralement plusieurs classes, et ces classes seront liées les unes aux autres de différentes manières. Les modèles fournissent à la fois des vues sur ces relations et parfois des suggestions sur la façon dont les comportements peuvent être atteints en utilisant différentes relations entre les classes. Une machine d'état est susceptible d'être impliquée, qu'il s'agisse d'une machine à états simple ou d'un modèle d'objet d'état, d'un interpréteur pour les règles ou d'une machine procédurale créée en transformant les règles à l'aide d'un visiteur; si les états sont déclenchés par des sources de données d'interrogation ou en utilisant des observateurs, et si le système peut être composé de machines d'état plus simples, ou si un planificateur est nécessaire pour exécuter plusieurs machines à la fois .

0

Pattern Observer:

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 
}); 

Puis, plus tard eventA et eventB appellera notify() pour tous les observateurs inscrits, qui déclencheront les callbacks pour l'alarme de départ compte à rebours d'alarme/reseting.

Le code est en pesudo-javascript. Si vous utilisez javascript complet, utilisez simplement setTimeout et clearTimeout dans les rappels. Je suppose que je devrais mentionner qu'un modèle Pub/Sub (dont Observer est un sous-ensemble de) est parfaitement bien aussi.

Questions connexes