Vous êtes sur la page 1sur 14

Introduction aux Design Patterns en Java

par Alexandre Brillant

Date de publication : Dernire mise jour :

Tutoriel d'introduction aux Design Patterns en Java.

Introduction aux Design Patterns en Java par Alexandre Brillant

Introduction 1.0 - Quelques rappels sur la conception objet 2.0 - Dfinition des design patterns 3.0 - Les modles de cration 3.1 - Fabrique de cration 3.2 - Singleton 3.3 - Builder 4.0 - Les modles de structure 4.1 - Adapter 4.2 - Proxy 4.3 - Composite 5.0 - Les modles de comportement 5.1 - Iterator 5.2 - Template 6.0 - Pour conclure 7.0 - Tlchargements

-2Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

Introduction
L'approche oriente objet tend clater les applications en composants plus simples et rutilisables. Cependant, cette approche peut vite devenir un pige lorsque le dcoupage s'effectue sans rgles prcises. Le concepteur finit par tre satur par la complexit du codage (effet spaghetti). J'en veux pour preuve ma propre exprience sur une application Java d'environ 40000 lignes de code. Sans architecture de base, cette application est devenue progressivement ingrable avec pour consquence l'mergence de bugs de plus en plus difficiles corriger (effet dominos). Pour rduire les risques de maintenance, il a fallu exploiter un niveau supplmentaire dans la conception objet : Les modles de conception ou design patterns.

-3Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

1.0 - Quelques rappels sur la conception objet


Contrairement aux langages de type procduraux comme le C ou le Pascal, la conception objet ne divise pas l'espace de donnes (attributs) et l'espace de traitements (mthodes). Cet espace commun s'applique une partie du problme grer sous la forme d'une classe. Une classe est une reprsentation abstraite dcrivant comment faire fonctionner des objets. Les objets sont construits partir de cette classe lors de l'excution par un processus d'instanciation (en Java l'oprateur new). Chacune des dclarations dans une classe peut tre limite dans sa porte (porte locale ou prive, porte de groupe ou package, porte de descendance ou protge, porte globale ou publique). Une classe peut tre associe d'autre classes pour faciliter la rutilisation. L'association la plus commune est l'hritage. L'hritage sert spcialiser une classe existante (lien de gnralisation/spcialisation) par la modification/l'ajout de nouvelles mthodes et de nouvelles donnes. Cette spcialisation conduit la construction de nouvelles classes (appeles aussi sous-classes). Le concept d'hritage peut tre vu comme la conception d'un lment "est une sorte de". Par exemple, une Voiture peut tre vue comme une sous-classe de la classe Vhicule, une Voiture hrite donc de la classe Vhicule, elle tend les caractristiques du vhicule par des donnes et des mthodes supplmentaires (la vitesse de pointe, le moteur...). Lorsqu'une mthode d'une classe est redfinie par une sous-classe, on dit qu'il y a surcharge. Comme nous le verrons dans la suite cette possibilit donne une grande souplesse l'introduction de classes gnriques dlguant certains comportements aux sous-classes. Certaines classes ne sont pas compltement construites afin d'obliger les sous-classes effectuer une surcharge. On parle alors de classes abstraites ou d'interfaces. L'interface est employe en Java pour compenser l'interdication d'utiliser l'hritage multiple (hritage de plusieurs classes), interdication qui n'apparat pas en C++. Une interface est associe une ou plusieurs classes d'implmentation. Une classe d'implmentation contient donc le code de ralisation de l'interface. Dans la suite de l'article, nous proposerons des exemples en Java. Ces exemples sont facilement transposables en C++ ou dans tout autre langage objet.

-4Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

2.0 - Dfinition des design patterns


Les design patterns ou modles de conception dcrivent des organisations pratiques de classes objets. Ces organisations rsultent souvent d'une conception empirique, le concepteur objet tente de faciliter la rutilisation et la maintenance du code. On peut donc concevoir un modle d'application comme une forme d'organisation transposable plusieurs applications. Ces systmes peuvent apparatre complxes aux dbutants voire inutiles, il est pourtant trs important d'en connatre plusieurs et de les appliquer systmatiquement. L'architecte objet se construit petit petit un "panier" de modles. Les designs patterns ne sont pas rllement normaliss, mais on peut les dcouper en trois grandes catgories : Les modles de cration : Ces modles sont trs courants pour dsigner une classe charge de construire des objets. Les modles de structure : Ces modles tendent concevoir des agglomrations de classes avec des macro-composants. Les modles de comportement : Ces modles tentent de rpartir les responsabilits entre chaque classe.

-5Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

3.0 - Les modles de cration


On se trouve en programmation objet souvent confront au problme d'volution des classes. Une classe hrite d'une autre classe pour en spcialiser certains lments. On aimerait donc qu'un objet puisse appartenir telle ou telle classe (dans une mme famille par hritage) sans avoir chercher la classe de gestion de ces objets et la ligne de code qui effectue l'instanciation.

3.1 - Fabrique de cration


Une fabrique de cration (ou factory) est une classe qui n'a pour rle que de construire des objets. Cette classe utilise des interfaces ou des classes abstraites pour masquer l'origine des objets. Exemple :
/** Interface de description d'un point */ public interface Point { /** Retourne l'abscisse du point */ public int getX(); /** Retourne l'ordonne du point */ public int getY(); } /** Interface de description d'une ligne */ public interface Line { /** Retourne les coordonnes du mier point */ public int getX1(); public int getY1(); /** Retourne les coordonnes du deuxime point */ public int getX2(); public int getY2(); } /** Fabrique retournant des objets de types point ou ligne */ public class CanvasFactory { /** Retourne un Point aux coordonnes x,y */ public Point getPoint( int x, int y ) { return new PointImpl( x, y ); } /** Retourne une Ligne aux coordonnes x1,y1,x2,y2 */ public Line getLine( int x1, int y1, int x2, int y2 ) { return new LineImpl( x1, y1, x2, y2 ); } }

Dans cet exemple, nous dfinissons deux interfaces Point et Line reprsentant deux classes Abstraites. Ces classes Point et Line designent des objets retournes par la classe CanvasFactory. Cette classe masque la vritable nature des objets. Ici nous retournons par les mthodes d'accs des objets PointImpl et LineImpl qui implmentent respectivement les interfaces Point et Line. Ainsi, l'application utilisera la classe CanvasFactory pour obtenir des lments graphiques, lors d'une volution l'utilisateur pourra changer facilement la nature des objets (avec d'autres classes implmentant les interfaces Point et Line...). On distingue parfois deux formes de fabrique : Les fabriques abstraites comme celle que nous venons de voir reposant sur l'exploitation de classes gnriques (Point et Line). Les fabriques concrtes masquant toutes les mthodes ncssaires la cration et l'initialisation de l'objet.

3.2 - Singleton

-6Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

Un singleton sert contrler le nombre d'instances d'une classe prsent un moment donn. C'est souvent trs pratique pour les classes sans tat et effectuant toujours les mmes traitements. Un singleton est construit grce des mthodes de classes. Ces mthodes appartiennent une classe et peuvent tre accedes indpendemment de l'objet. Exemple :
public CanvasFactory { /** Donne de classe contenant l'instance courante */ private static CanvasFactory instance = new CanvasFactory(); /** Constructeur priv interdisant l'instanciation en dehors de cette classe */ private CanvasFactory () {} /** Singleton de la classe courante */ public static CanvasFactory getInstance() { return instance; } ... }

Pour continuer avec l'exemple prcdent, nous ajoutons notre classe CanvasFactory un attribut de classe par la dclaration "private static" reprsentant l'unique instance disponible de la classe. Nous ajoutons un constructeur de porte prive "CanvasFactory()" pour interdire l'instanciation de cette classe. Enfin la mthode "public static CanvasFactory getInstance" nous retourne l'instance unique de la classe CanvasFactory. Typiquement l'usage de la classe CanvasFactory se fera sous la forme suivante :
CanvasFactory cf = CanvasFactory.getInstance();

Le singleton limite le nombre d'instance en mmoire. Il peut tre parfois peru comme une fabrique particulire.

3.3 - Builder
Le Builder ou Monteur est une classe offrant des moyens de construction d'un objet. Par exemple, pour construire un dessin il faut ajouter des points, des lignes, des cercles.... Il ne doit pas tre confondu avec la Fabrique. Le problme d'une Fabrique de cration, c'est qu'elle ne permet de dfinir comment un objet va tre construit, certes, il est toujours possible de passer x paramtres dans la mthode de cration d'une fabrique mais cela s'avre souvent trs rducteurs voire dlicat pour la maintenance. Exemple :
/** Builder pour les objets Canvas */ public CanvasBuilder { /** Initialise le canvas */ public void initCanvas( Canvas c ) { ... } /** Ajouter un point aux coordonnes x,y */ public void addPoint( int x, y ) { ... } /** Ajouter une ligne aux coordonnes x1,y1,x2,y2 */ public void addLine( int x1, int y1, int x2, int y2 ) { ... } }

Cet exemple illustre l'usage du Monteur pour construire un espace de dessin (canvas) l'aide de primitive. Tout d'abord, on appelera la mthode "initCanvas" qui se chargera de dsigner une Fabrique pour un Canvas et effacera l'espace de dessin. Ce canvas pourra tre enrichi par les mthodes "addPoint" ou "addLine". L'utilisateur ne manipule donc plus un objet directement, il applique un ensemble d'oprations trs naturellement. Le concepteur du Monteur peut n'importe quel moment changer la nature de l'objet voire l'interprtation des

-7Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

mthodes disponibles. Exemple l'usage :


//Instanciation du Builder CanvasBuilder cb = new CanvasBuilder(); Canvas c = new CanvasImpl(); //Montage du Canvas cb.initCanvas( c ); cv.addPoint( 5, 5 ); cv.addLine( 0, 0 ); cv.addLine( 10,0 ); cv.addLine( 10, 10); ...

On peut exploiter les Monteurs en complment d'une Fabrique. Un Fabrique utilise alors le Builder pour "monter" l'objet retourn.

-8Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

4.0 - Les modles de structure


Ces modles de conception tentent de composer des classes pour btir de nouvelles structures. Ces structures servent avant tout ne pas grer diffremment des groupes d'objets et des objets uniques. Tout le monde en utilisant un logiciel de dessin vectoriel est amen grouper des objets. Les objets ainsi conus forment un nouvel objet que l'on peut dplacer, et manipuler sans avoir rpter ces oprations sur chaque objet qui le compose. On obtient donc une structure plus large mais toujours facilement manipulable.

4.1 - Adapter
L'Adapteur ou Adapter est un moyen commode de faire fonctionner un objet avec une interface qu'il ne possde pas. L'ide est de concevoir une classe supplmentaire qui se charge d'implmenter la bonne interface (L'Adapteur) et d'appeler les mthodes correspondantes dans l'objet utiliser (L'adapt). Exemple :
/** Interface de reprsentation d'un cercle */ public interface Circle { /** Retourne l'abscisse du centre du cercle */ public int getX(); /** Retourne l'ordonne du centre du cercle */ public int getY(); /** Retourne le rayon du cercle */ public int getR(); } /** Classe implmentant l'interface Circle */ public class CircleImpl implements Circle { ... } /** Adapteur pour transformer le circle en un point */ public class CircleImplPointAdapter implements Point { private Circle c; public CircleImplPointAdapter( Circle c ) { this.c = c; } public int getX() { return c.getX(); } public int getY() { return c.getY(); } }

Cet exemple tente de convertir un objet implmentant l'interface Circle en un objet de type Point. Une classe CircleImplPointAdapterva raliser cette liaison se chargeant d'implmenter l'interface Point et d'appeler les mthodes du Cercle analogue celle du Point, en l'occurrence getX et getY. L'adapteur sert donc lier des classes indpendantes n'ayant pas les bonnes interfaces. Cette exploitation est rserve au cas particulier o le changement d'une classe mre serait impossible voire trop complxe. Attention cependant ne pas accrotre de manire inconsidrer le nombre de classe par l'introduction d'adapteur tous les niveaux. L'adapteur reste un moyen pour effectuer des "raccords".

4.2 - Proxy
Assez proche de l'Adapteur, le Proxy cherche ajouter un niveau de redirection entre l'appel d'une mthode d'un objet et l'action associe. A cet effet, on construit une nouvelle classe implmentant l'interface de l'objet manipuler et dportant toutes les actions sur un autre objet implmentant la mme interface. Ce type de structure vise pouvoir changer l'objet cible sans changer l'objet source (manipul). Exemple :
-9Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

/** Interface reprsentant un espace de dessin */ public interface Canvas { /** Ajout d'un objet graphique */ public void addGraphicElement( GraphicElement ge ); } /** Proxy pour l'espace de dessin */ public class CanvasProxy implements Canvas { private Canvas c; public CanvasProxy( Canvas c ) { this.c = c; } public void addGraphicElement( GraphicElement ge ) { c.addGraphicElement( ge ); } }

Dans cet exemple, une interface Canvas est dfinie avec une mthode pour ajouter des objets graphiques. Le proxy CanvasProxy est une classe qui se charge d'implmenter l'interface Canvas et d'appeler les mthodes sur l'objet Canvas pass en paramtre de constructeur. On pourrait comme exemple pratique, imaginer que le canvas puisse aussi exister dans sa forme contraire pour faire office de gomme. En passant dans le mode "gomme", tout objet ajout effacerait une partie du fond comme une empreinte, pour cela, il sufferait dans la classe CanvasProxy de modifier ou changer d'objet Canvas. L'exploitant manipulerait dans tous les cas le mme objet. Les Proxy sont trs utiliss pour la gestion d'objets distribus (protocole RMI en Java par exemple). L'ide tant de construire des Proxy capable de communiquer avec des objets distants (usage de la srialisation en Java) sans que l'exploitant fasse de diffrences entre un accs locale ou un accs distant.

4.3 - Composite
Le modle Composite cherche liminer toute diffrence entre un groupe d'objets et un objet. Il s'agit d'une dmarche rcurrente valable pour tous les problmes qui font merger de nouvelles structure par association. L'exemple le plus simple tant celui du groupe d'objets dans un logiciel de dessin comme nous l'avons vu prcdemment. La manire la plus simple pour grer ces modles est l'exploitation d'une interface unique pour les lments simples et l'lment "compos". Exemple :
/** Implmentation de l'interface Canvas composite */ public class CanvasImpl implements GraphicElement, Canvas { /** Ajout d'un lment graphique ou d'un Canvas ! */ public void addGraphicElement( GraphicElement ge ) { ... }

Notre exemple se base sur l'exemple prcdent, ici nous adoptons deux interfaces pour la classe CanvasImpl : L'interface Canvas contenant la mthode "addGraphicElement" pour construire notre espace de dessin L'interface GraphicElement pour associer l'espace de dessin un nouvel lment graphique. Il est donc possible d'ajouter un objet de la classe CanvasImpl dans un objet de la classe CanvasImpl.

L'utilisation d'une interface commune limite les besoins de tests de chaque objet, ici tous les objets sont vus de la mme manire. On rencontre cette exploitation dans les arbres DOM avec les documents XML. Un document XML est lui-mme une forme de noeud ce qui permet de crer du chainage de documents trs facilement.

- 10 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

5.0 - Les modles de comportement


Le modle de comportement simplifie l'organisation d'excution des objets. Typiquement, une fonction est compose d'un ensemble d'actions qui parfois appartiennent des domaines diffrents de la classe d'implmentation. On aimerait donc pouvoir "dlguer" certains traitement d'autres classes. D'une manire gnrale, un modle de de comportement permet de rduire la complexit de gestion d'un objet ou d'un ensemble d'objet.

5.1 - Iterator
L'Itrateur ou Iterator est le plus comun des modles de comportement. L'ide tant de limiter la vision d'une collection par un utilisateur. Typiquement une collection contient un ensemble d'objets stock par diffrentes mthodes (un tableau, un vecteur...), l'exploitant qui accde au contenu de la collection ne souhaite pas tre concern par cette manire de grer les objets. La collection offre donc un point d'accs unique sous la forme d'une interface Iterator. Exemple :
/** Classe de gestion d'un espace de dessin */ public class CanvasImpl implements GraphicsElement, Canvas { // Tableau pour stoker les lments de la collection private GraphicsElement[] ge; ... /** Retourne un itrateur pour accder aux objets de la collection */ public Iterator getIterator() { return ArrayIterator( ge ); } } /** Interface pour toutes les collections d'objets de GraphicElement */ public interface Iterator { public GraphicElement getNextElement(); } /** Iterateur parcourant un tableau pour retourner des objets de type GraphicElement */ public class ArrayIterator implements Iterator { private GraphicElement[] ge; private int nge; /** Constructeur avec un tableau de donnes parcourir */ public ArrayIterator( GraphicElement[] ge ) { this.ge = ge; nge = 0; } /** Retourne chaque lment de la collection ou null */ public GraphicElement getNextElement() { if ( nge >= ge.length ) return null; return ge[ nge++ ]; } }

Cet exemple comprend un itrateur pour la collection CanvasImpl qui contient des objets de type GraphicElement. Ces objets sont stocks dans un tableau, un itrateur ArrayIterator parcourt le tableau et offre chaque lment contenu dans la collection par la mthode getNextElement. Si plus tard, on dsire changer de mthode de stockage des objets pour des raisons de performances ou de cots mmoire, il suffira de raliser une nouvelle classe implmentant l'interface Iterator.

5.2 - Template
Un Template ou Patron de mthode est trs utilis dans la conception objet. Ce modle utilise simplement les mcanismes de surcharge pour dlguer d'autres classes certaines parties d'un algorithme. L'ide ressemble un peu au modle Builder sauf qu'ici, il sert construire un traitement et non un objet.

- 11 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

Exemple :
/** Template d'extraction d'lments d'une collection selon diffrents critres */ public abstract class GraphicElementSorter { /** Iterateur d'une collection d'objet GraphicElement */ public GraphicElementSorter( Iterator t ) { ... } /** Retourne l'objet le plus grand de la collection pass dans le constructeur */ public GraphicElement getMaxGraphicElement() { GraphicElement refGe = t.getNextElement(); for ( GraphicElement ge = t.getNextElement(); ge != null; ) { if ( isGreaterThan( ge, refGe ) ) then refGe = ge; } return refGe; } /** Mthode surcharger retournant l'objet graphique le plus grand entre ge1 et ge2 */ protected abstract GraphicElement isGreaterThan( GraphicElement ge1, GraphicElement ge2 ); } /** Cette classe dsigne la mthode pour comparer la taille de deux objets */ public class SimpleGraphicElementSorter { /** Cette mthode compare deux objets ayant chacun une mthode size retournant la surface */ public GraphicElement isGreaterThan( GraphicElement ge1, GraphicElement ge2 ) { if ( ge1.size() > ge2.size() return ge1; else return ge2; } }

Le Template fonctionne par couche. Il permet d'anticiper le champs d'application des algorithmes. Le Template peut exister aussi par l'usage de dlgu. Par exemple, on fournit un objet capable de comparer deux Elements la classe effectuant le traitement principal ce qui vite d'effectuer de l'hritage pour modifier un simple traitement.

- 12 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

6.0 - Pour conclure


Les Design Patterns reprsentent un espace trs riche de composition ou de simplification de votre dveloppement objet. Les Design Patterns peuvent rendre de grands services condition de ne pas les exploiter excessivement, il faut comme dans tout chose savoir doser entre l'existant et les volutions supposs. De nombreux modles de conception existent et restent aussi dcouvrir. Il faut garder la tte froide quand des "spaghettis apparaissent" et savoir prparer les cannellonis.

- 13 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Introduction aux Design Patterns en Java par Alexandre Brillant

7.0 - Tlchargements
Tutoriel au format HTML - (mirroir) Tutoriel au format PDF - (mirroir)

- 14 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - Alexandre Brillant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://nomdomaine.developpez.com/

Vous aimerez peut-être aussi