Template Method
Design Pattern
But
Définir le squelette d’un algorithme
tout en déléguant certaines étapes
aux sous-classes.
Les sous-classes peuvent redéfinir
certaines étapes de l’algorithme sans
en changer la structure.
Exemple
public class Application
{… public OpenDocument (String name)
{ if (!CanOpenDocument(name))
{ // cannot handle this document
return; }
Document doc =DoCreateDocument();
if (doc != null)
{ _docs.AddDocument(doc);
AboutToOpenDocument(doc);
doc.Open();
doc.DoRead();
} } }
Exemple
La méthode template définit l’algorithme en termes
d’opérations abstraites.
Les sous-classes les redéfinissent pour spécifier le
comportement concret de différentes étapes de l’algorithme
Est-ce que le document peut être ouvert? (CanOpenDocument)
Création du document (DoCreateDocument)
Lecture du document (DoRead).
Informer les sous-classes que le document va être ouvert au
cas où elles s’en préoccuperaient (AboutToOpenDocument).
La méthode “template” fixe l’ordre des opérations,
mais laisse la possibilité aux sous-classes de définir les
détails de ces opérations.
Quand appliquer
le patron Template Method?
Pour implémenter les parties invariantes d’un algorithme une
seule fois
et laisser aux sous-classes le soin d’implémenter les parties
qui varient.
Lorsqu’un comportement commun entre des sous-classes
devrait être factorisé et placé dans une classe commune afin
d’éviter la duplication de code
"refactoring to generalize"
Identifer les différences dans le code existant
Extraire ces différences dans de nouvelles méthodes
Utiliser le template method pour appeler ces méthodes
Pour contrôler les extensions des sous-classes
Définir une méthode template
qui appelle des méthodes "hook" en des points spécifiques
de manière à ne permettre les extensions seulement qu’en ces
points
1 / 18 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !