En génie logiciel, le patron de conception chaîne de responsabilité permet à un nombre quelconque de classes d'essayer de répondre à une requête sans connaître les possibilités des autres classes sur cette requête. Cela permet de diminuer le couplage entre objets. Le seul lien commun entre ces objets étant cette requête qui passe d'un objet à l'autre jusqu'à ce que l'un des objets puisse répondre. Ce patron de conception permet aussi de séparer les différentes étapes d'un traitement et d'implémenter facilement les relations d'héritage.
Dès lors qu'une information doit recevoir plusieurs traitements, ou juste être transmise entre différents objets.
L'exemple ci-dessous présente un système de log. Lors de la réception d'un message, ce dernier va passer d'un logger à l'autre, déclenchant ou non le traitement associé.
#include
#include
using namespace std;
class Logger
{
protected:
int level;
Logger* next;
public:
enum
{
ERR,
NOTICE,
DEBUG
};
Logger* setNext(Logger* next)
{
this->next = next;
return (this->next);
}
void message(string msg, int priority)
{
if (priority level)
this->writeMessage(msg);
else if (this->next != NULL)
this->next->message(msg, priority);
}
virtual void writeMessage(string msg) = 0;
};
class DebugLogger : public Logger
{
public:
DebugLogger(int level)
{
this->level = level;
this->next = NULL;
}
void writeMessage(string msg)
{
cout < "Message de debug : " < msg < endl;
}
};
class EmailLogger : public Logger
{
public:
EmailLogger(int level)
{
this->level = level;
this->next = NULL;
}
void writeMessage(string msg)
{
cout < "Notification par email : " < msg < endl;
}
};
class ErrorLogger : public Logger
{
public:
ErrorLogger(int level)
{
this->level = level;
this->next = NULL;
}
void writeMessage(string msg)
{
cerr < "Erreur : " < msg < endl;
}
};
int main()
{
// Construction de la chaine de responsabilite
ErrorLogger logger(Logger::ERR);
EmailLogger logger2(Logger::NOTICE);
DebugLogger logger3(Logger::DEBUG);
logger.setNext(&logger2);
logger2.setNext(&logger3);
logger.
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.
La programmation orientée objet (POO), ou programmation par objet, est un paradigme de programmation informatique. Elle consiste en la définition et l'interaction de briques logicielles appelées objets ; un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs.
Couvre les modèles de décorateur et de design composite pour ajouter des fonctionnalités et composer des objets.
Couvre le modèle de conception du décorateur, en se concentrant sur l'extension dynamique de la fonctionnalité des classes.
Compare le modèle de conception de décorateur avec l'héritage en Java, en mettant l'accent sur les décisions de conception de classe appropriées.
Current task-oriented dialog (TOD) systems mostly manage structured knowledge (e.g. databases and tables) to guide the goal-oriented conversations. However, they fall short of handling dialogs which also involve unstructured knowledge (e.g. reviews and doc ...