TUTORIELS 
Les "design patterns": théorie et principaux motifs

Page 1 | 2

Dans le monde de l'orienté-objet, les design patterns se présentent comme un catalogue de méthodes de résolution de problèmes récurrents.
 (22 avril 2003)
 

Les motifs
Le Gang of Four avait déjà construit un large catalogue de motifs, catégorisés en motifs de Création (Abstract Factory, Builder, Factory Method, Prototype, Singleton), de Structure (Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy) et de Comportement (Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor). D'autres motifs et catégories ont été découverts après sa publication (notamment le motif MVC). Notre but n'est pas ici de résumer cet ouvrage ou de vous donner une liste exhaustive, mais de vous donner une approche des principaux motifs. Rien n'empêche d'utiliser plusieurs motifs pour un même projet...


Le motif Modèle-Vue-Contrôleur

C'est le plus utilisé aujourd'hui: il a une place prominente dans les Struts de Java. Il vient cependant du monde de Smalltalk, l'un des premiers langages orientés-objet, et est en fait une combinaison des motifs Observer, Composite et Strategy.

L'idée de base de MVC est qu'un programme peut être décomposé en trois parties:
- le modèle, contenant les données que le programme utilise,
- la vue, qui indique comment l'interface utilisateur représente les données,
- le contrôleur, qui fait le lien entre les deux: comme son nom l'indique, il contrôle la manière dont la vue affiche le modèle.

L'idée forte de ce motif est la séparation totale des données, de leur traitement et de leur représentation. Cela permet de modifier l'interface (ou d'en ajouter d'autres) facilement, sans avoir à toucher aux classes qui manipulent les données.


Le motif Proxy

Ce motif oblige les appels des méthodes d'un objet à passer indirectement par un objet proxy qui agit comme un substitut pour l'autre objet, déléguant les appels de méthodes à cet objet. Les classes sont créées de telle sorte que l'objet client ne peut voir qu'il travaille avec un proxy.
C'est un motif général, que l'on retrouve dans de nombreux autres motifs (Access Proxy, Facade, Remote Proxy, Virtual Proxy, Decorator), mais qui est rarement utilisé en tant que tel.


Le motif Observer

Il permet aux objets d'enregistrer dynamiquement les dépendances entre objets, de telle sorte qu'un objet notifie ceux qui dépendent de lui lorsqu'il change d'état.


Le motif Visitor

Il présente une manière de séparer un algorithme de la structure d'un objet, ainsi que de spécifier comment les itérations se déroulent au sein de la structure de l'objet
.

Un jeu de classes forme la structure d'un objet. Chacune de ces classes dispose d'une méthode accepter qui prend un objet visiteur en argument. Le visiteur est une interface ayant différentes méthodes visiter pour chacune des classes. La méthode accepter d'une classe appelle ainsi la méthode visiter qui correspond à sa classe. Des classes visiteur concrètes et séparées peuvent ainsi être créées pour accomplir des tâches particulières.


Le motif Singleton

Ce motif est conçu pour restreindre les occurrences d'une classe au plus petit nombre d'objets (au mieux, un seul). C'est particulièrement utile quand un seul objet est nécessaire pour coordonner toutes les actions d'un système.

Il s'implémente en créant une classe dont une méthode créé une nouvelle occurrence de l'objet s'il n'y en a pas déjà une. Si l'objet existe déjà, la méthode renvoi une référence à cet objet. Pour garantir que le projet ne peut pas être instancié autrement que par cette méthode, le constructeur de la classe doit être privé ou protégé.

Il ne s'agit là que d'un survol, le meilleur moyen pour se plonger dans les motifs de conception est de se procurer la documentation complète de chaque motif, et de trouver celui qui vous permettra de résoudre vos problèmes. Une fois compris les motifs de conception, il est difficile de revenir en arrière tant ils facilitent le développement.

Page 1 | 2

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page