Posez n’importe quelle question sur les cours, conférences, exercices, recherches, actualités, etc. de l’EPFL ou essayez les exemples de questions ci-dessous.
AVERTISSEMENT : Le chatbot Graph n'est pas programmé pour fournir des réponses explicites ou catégoriques à vos questions. Il transforme plutôt vos questions en demandes API qui sont distribuées aux différents services informatiques officiellement administrés par l'EPFL. Son but est uniquement de collecter et de recommander des références pertinentes à des contenus que vous pouvez explorer pour vous aider à répondre à vos questions.
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.