60
Design Patterns Présenté par Eric TOGUEM

Design patterns

Embed Size (px)

DESCRIPTION

Présentation de 23 des patrons logiciels les plus célèbres.

Citation preview

Page 1: Design patterns

Design Patterns

Présenté par Eric TOGUEM

Page 2: Design patterns

Introduction

2

Page 3: Design patterns

Origines

Issus des travaux de l'architecte Christopher Alexander

(patrons en architecture des bâtiments)

1995: Parution du livre "Design Patterns -- Elements of

Reusable Object-Oriented Software",

Gang Of Four (Erich Gamma, Richard Helm, Ralph Johnson et

John Vlissides),

Présente 23 Design Patterns

3

Page 4: Design patterns

Qui suis je?

4

Eric Joël TOGUEM

CIO à AByster Inc.

Leader de CamerJUG,

Certifications: OCPJP 6, OCEJPAD6,

[email protected]

Page 5: Design patterns

Design Pattern?

Description d'une solution à un problème de conception

"Prouvé » s'il a pu être utilisé dans au moins 3 cas

Permettent d'améliorer la qualité de développement et

d'en diminuer la durée

5

Page 6: Design patterns

Design Pattern: 3 catégories

Créationnels : Définissent des mécanismes pour

l'instanciation et/ou l'initialisation d'objets

Structuraux : Organisent les interfaces/classes entre

elles

Comportementaux : Définissent la communication

entre les classes et leurs responsabilités

6

Page 7: Design patterns

Design pattern créationnels

Définissent des mécanismes pour l'instanciation et/ou

l'initialisation d'objets

7

Page 8: Design patterns

5 design patterns créationnels

Fabrique Abstraite: Isole l'appartenance à une famille

de classes

Monteur: Isole les variations de représentations d'un

objet

Fabrique: Isole l'instanciation d'une classe concrète

Prototype: Isole l'appartenance à une classe

Singleton: Isole l'unicité d'une instance.

8

Page 9: Design patterns

Fabrique Abstraite (Abstract factory)

Objectif: Fournir une interface pour créer des objets

d'une même famille sans préciser leurs classes concrètes.

Quand Utiliser: Le système utilise des objets qui sont

regroupés en famille.

Exemple: pour un look and feel donné, tous les

graphiques créés doivent être de la même famille

Résultat : Isole l'appartenance à une famille de classes.

9

Page 10: Design patterns

Fabrique Abstraite (Abstract factory)

10

Page 11: Design patterns

Monteur (Builder)

Objectifs:

Séparer la construction d'un objet complexe de sa

représentation.

Permettre d'obtenir des représentations différentes avec le

même procédé de construction.

Quand Utiliser: Le système doit instancier des objets

complexes,

Exemple: Différentes fenêtres d’une IHM,

Résultat: Isole les variations de représentations d'un

objet

11

Page 12: Design patterns

Monteur (Builder)

12

Page 13: Design patterns

Fabrique (Factory Method)

Objectifs: Déléguer l'instanciation aux sous-classes.

Quand Utiliser: Au niveau d’une classe, on ne connaît

pas la classe exacte à instancier,

Exemple: Classe réalisant une sauvegarde dans un flux

sortant, mais ne sachant pas s'il s'agit d'un fichier ou d'une

sortie sur le réseau,

Résultat: Isole l'instanciation d'une classe concrète.

13

Page 14: Design patterns

Fabrique (Factory Method)

14

Page 15: Design patterns

Prototype (Prototype)

Objectifs: Créer un nouvel objet à partir d’un

prototype.

Quand Utiliser: Le système doit créer de nouvelles

instances, mais il ignore de quelle classe. Il dispose

cependant d'instances de la classe désirée.

Exemple: Cas d'un logiciel de DAO comportant un

copier-coller,

Résultat: Isole l'appartenance à une classe.

15

Page 16: Design patterns

Prototype (Prototype)

16

Page 17: Design patterns

Singleton (Singleton)

Objectifs

Restreindre le nombre d' instances d'une classe à une seule.

Fournir une méthode pour accéder à cette instance unique.

Quand Utiliser: La classe ne doit avoir qu'une seule

instance.

Exemple: Cas d'une ressource système,

Résultat: Isole l'unicité d'une instance.

17

Page 18: Design patterns

Singleton (Singleton)

18

Page 19: Design patterns

Designs pattern structuraux

Organisent les interfaces/classes entre elles

19

Page 20: Design patterns

7 designs pattern structuraux

Adaptateur: Convertir l'interface d'une classe dans une autre interface comprise par la partie cliente

Pont: Découpler l'abstraction d'un concept de son implémentation

Composite: Permettre à la partie cliente de manipuler un objet unique et un objet composé de la même manière

Décorateur: Ajouter dynamiquement des responsabilités à un objet

Façade: Fournir une interface unique en remplacement d'un ensemble d'interfaces d'un sous-système

Poids-Mouche: Utiliser le partage pour gérer efficacement un grand nombre d'objets de faible granularité

Proxy: Fournir un intermédiaire entre la partie cliente et un objet pour contrôler les accès à ce dernier

20

Page 21: Design patterns

Adaptateur (Adapter ou Wrapper)

Objectifs: Convertir l'interface d'une classe dans une

autre interface comprise par la partie cliente.

Quand Utiliser: Le système doit intégrer un sous-

système existant. Ce sous-système a une interface non

standard par rapport au système.

Exemple: Cas d’un driver bas niveau fournit par le

fabricant ne correspondant pas à l'interface utilisée par le

système pour d'autres drivers.

Résultat: Isole l'adaptation d'un sous-système.

21

Page 22: Design patterns

Adaptateur (Adapter ou Wrapper)

22

Page 23: Design patterns

Pont (Bridge ou Handle/Body)

Objectifs: Découpler l'abstraction d'un concept de son implémentation.

Quand Utiliser: Le système comporte une couche bas niveau réalisant l'implémentation et une couche haut niveau réalisant l'abstraction. Il est nécessaire que chaque couche soit indépendante.

Exemple: Système d'édition de documents d'une application. Pour l'implémentation, l'édition aboutit à une sortie imprimante, une image sur disque, un document PDF, etc. Pour l'abstraction, il s'agit d'édition de factures, de rapports de stock ou de courriers divers.

Résultat: Isole le lien entre une couche de haut niveau et celle de bas niveau.

23

Page 24: Design patterns

Pont (Bridge ou Handle/Body)

24

Page 25: Design patterns

Composite (Composite)

Objectifs: Permettre à la partie cliente de manipuler un

objet unique et un objet composé de la même manière.

Quand Utiliser: Le système comporte une hiérarchie

avec un nombre de niveaux non déterminé. Il faut pouvoir

considérer un groupe d'éléments comme un élément

unique.

Exemple: Logiciel de DAO, plusieurs éléments

graphiques peuvent être regroupés en un nouvel élément

graphique.

Résultat: Isole l'appartenance à un agrégat.

25

Page 26: Design patterns

Composite (Composite)

26

Page 27: Design patterns

Décorateur (Decorator ou Wrapper)

Objectifs: Ajouter dynamiquement des responsabilités à

un objet.

Quand Utiliser: Il est nécessaire de pouvoir étendre les

responsabilités d'une classe sans avoir recours au sous-

classage.

Exemple: Cas d'une classe gérant des d'entrées/sorties à

laquelle on souhaite ajouter un buffer et des traces de

log.

Résultat: Isole les responsabilités d'un objet.

27

Page 28: Design patterns

Décorateur (Decorator ou Wrapper)

28

Page 29: Design patterns

Façade (Facade)

Objectifs: Fournir une interface unique en remplacement

d'un ensemble d'interfaces d'un sous-système.

Quand Utiliser: Le système comporte un sous-système

complexe avec plusieurs interfaces, certaines présentant

des opérations pas utiles au reste du système.

Exemple: Cas d'un sous-système communiquant avec

des outils de mesure.

Résultat: Isole les fonctionnalités d'un sous-système

utiles à la partie cliente.

29

Page 30: Design patterns

Façade (Facade)

30

Page 31: Design patterns

Poids-Mouche (Flyweight)

Objectifs: Utiliser le partage pour gérer efficacement un

grand nombre d'objets de faible granularité.

Quand Utiliser: Un système utilise un grand nombre d'

instances. Chacune de ces instances a des attributs

propre au contexte et propre à l'objet.

Exemple: Cas caractéristiques des traits dans un logiciel

de DAO. Les caractéristiques d'épaisseur, d'ombre sont

intrinsèques, et les coordonnées sont extrinsèques.

Résultat: Isole les propriétés partageables des objets.

31

Page 32: Design patterns

Poids-Mouche (Flyweight)

32

Page 33: Design patterns

Proxy (Proxy ou Surrogate)

Objectifs: Fournir un intermédiaire entre la partie

cliente et un objet pour contrôler les accès à ce dernier.

Quand Utiliser: Les opérations d'un objet sont

coûteuses en temps ou sont soumises à une gestion de

droits d'accès.

Exemple: Cela peut être un système de chargement d'un

document (gestion droits d’accès).

Résultat: Isole le comportement lors de l'accès à un

objet.

33

Page 34: Design patterns

Proxy (Proxy ou Surrogate)

34

Page 35: Design patterns

Design patterns

Comportementaux

Définissent la communication entre les classes et leurs

responsabilités

35

Page 36: Design patterns

11 design patterns Comportementaux

(1/2)

Chaîne de responsabilité: Eviter le couplage entre l'

émetteur d'une requête et son récepteur en donnant à plus

d'un objet une chance de traiter la requête

Commande : Paramétrer facilement des requêtes diverses.

Interpréteur : Définir une représentation de la grammaire

d'un langage.

Itérateur : Fournir un moyen de parcourir séquentiellement

les éléments d'un objet composé.

Médiateur : Gérer la transmission d'informations entre des

objets interagissant entre eux

Memento : Sauvegarder l' état interne d'un objet en

respectant l' encapsulation, afin de le restaurer plus tard.

36

Page 37: Design patterns

11 design patterns Comportementaux

(2/2)

Observateur : Prévenir des objets observateurs,

enregistrés auprès d'un objet observé, d'un événement

Etat : Changer le comportement d'un objet selon son

état interne.

Stratégie : Définir une famille d' algorithmes

interchangeables, indépendamment de la partie cliente.

Patron de méthode : Définir le squelette d'un

algorithme en déléguant certaines étapes à des sous-

classes.

Visiteur : Séparer un algorithme d'une structure de

données.

37

Page 38: Design patterns

Chaîne de responsabilité (Chain of

responsibility)

Objectifs: Eviter le couplage entre l' émetteur d'une

requête et son récepteur en donnant à plus d'un objet

une chance de traiter la requête.

Quand Utiliser: Le système doit gérer un requête. La

requête implique plusieurs objets pour la traiter.

Exemple: Cas d'un système complexe d'habilitations

possédant plusieurs critères afin d'autoriser l'accès. Ces

critères peuvent varier en fonction de la configuration.

Résultat: Isole les différentes parties d'un traitement.

38

Page 39: Design patterns

Chaîne de responsabilité (Chain of

responsibility)

39

Page 40: Design patterns

Commande (Command, Action ou

Transaction)

Objectifs:

Encapsuler une requête sous la forme d' objet.

Paramétrer facilement des requêtes diverses.

Permettre des opérations réversibles

Quand Utiliser: Le système doit traiter des requêtes,

pouvant provenir de plusieurs émetteurs et pouvant être

annulées.

Exemple: cas d'une IHM avec des boutons de

commande, des raccourcis clavier et des choix de menu

aboutissant à la même requête.

Résultat: Isole une requête.

40

Page 41: Design patterns

Commande (Command, Action ou

Transaction)

41

Page 42: Design patterns

Interpréteur (Interpreter)

Objectifs:

Définir une représentation de la grammaire d'un langage.

Utiliser cette représentation pour interpréter les éléments de

ce langage.

Quand Utiliser: Le système doit interpréter un langage.

Exemple: Cas d'un logiciel embarqué dont la

configuration des écrans serait stockée dans des fichiers

XML.

Résultat: Isole les éléments d'un langage.

42

Page 43: Design patterns

Interpréteur (Interpreter)

43

Page 44: Design patterns

Itérateur (Iterator ou Cursor)

Objectifs: Fournir un moyen de parcourir

séquentiellement les éléments d'un objet composé.

Quand Utiliser: Le système doit parcourir les éléments

d'un objet complexe,

Exemple: Cas des classes représentant des listes et des

ensembles en Java.

Résultat: Isole le parcours d'un agrégat.

44

Page 45: Design patterns

Itérateur (Iterator ou Cursor)

45

Page 46: Design patterns

Médiateur (Mediator)

Objectifs: Gérer la transmission d'informations entre

des objets interagissant entre eux.

Quand Utiliser: Différents objets ont des interactions.

Un événement sur l'un provoque une (ou des) action(s)

sur un (ou d‘)autre(s) objets,

Exemple: Cas des éléments d'IHM. Si une case est

cochée, certains éléments deviennent accessibles.

Résultat: Isole la communication entre des objets.

46

Page 47: Design patterns

Médiateur (Mediator)

47

Page 48: Design patterns

Memento (Memento)

Objectifs: Sauvegarder l' état interne d'un objet en

respectant l' encapsulation, afin de le restaurer plus tard.

Quand Utiliser: Un système doit conserver et restaurer

l'état d'un objet. L'état interne de l'objet à conserver n'est

pas visible par les autres objets.

Exemple: Cas d’un éditeur de document disposant d'une

fonction d'annulation

Résultat: Isole la conservation de l'état d'un objet.

48

Page 49: Design patterns

Memento (Memento)

La partie cliente demande au Createur de stocker son état dans un Memento. Elle

demande au Gardien de conserver ce Memento. Elle peut alors demander au Gardien de

lui fournir un des Memento conservés, ou bien elle demande au Createur de restituer

son état depuis le Memento. 49

Page 50: Design patterns

Observateur (Observer)

Objectifs: Prévenir des objets observateurs, enregistrés

auprès d'un objet observé, d'un événement.

Quand Utiliser: Un objet doit connaitre les

changements d' état d'un autre objet. L'objet doit être

informé immédiatement.

Exemple: Cas d'un tableau affichant des statistiques. Si

une nouvelle donnée est entrée, les statistiques sont

recalculées

Résultat: Isole un algorithme traitant un événement.

50

Page 51: Design patterns

Observateur (Observer)

La partie cliente indique à l'objet Observe les objets Observateur qu'il avertira.

51

Page 52: Design patterns

Etat (State)

Objectifs: Changer le comportement d'un objet selon

son état interne.

Quand Utiliser: Un objet a un fonctionnement différent

selon son état interne.

Exemple: Cas d’un document informatique. Il a comme

fonctions ouvrir, modifier. Le comportement de ces

méthodes change selon l'état du document

Résultat: Isole les algorithmes propres à chaque état

d'un objet.

52

Page 53: Design patterns

Etat (State)

53

Page 54: Design patterns

Stratégie (Strategy)

Objectifs: Définir une famille d' algorithmes

interchangeables, indépendamment de la partie cliente.

Quand Utiliser: Un objet doit pouvoir faire varier une

partie de son algorithme.

Exemple: Cas d’un Cela peut être une liste triée. Le tri

peut être alphabétique, inverse, les majuscules avant les

miniscules, …

Résultat: Isole les algorithmes appartenant à une même

famille d'algorithmes.

54

Page 55: Design patterns

Stratégie (Strategy)

La partie cliente configure un objet ClasseUtilisantStrategie avec un objet Strategie

et appelle la méthode de ClasseUtilisantStrategie qui utilise la stratégie. 55

Page 56: Design patterns

Patron de méthode (Template method)

Objectifs: Définir le squelette d'un algorithme en

déléguant certaines étapes à des sous-classes.

Quand Utiliser: Une classe possède un fonctionnement

global. Mais les détails de son algorithme doivent être

spécifiques à ses sous-classes.

Exemple: Cas d'un document informatique qui peut être

sauvegardé. Selon le type de document, il ne sera pas

sauvegardé de la même manière, …

Résultat: Isole les parties variables d'un algorithme.

56

Page 57: Design patterns

Patron de méthode (Template method)

La partie cliente appelle la méthode de AbstractClasse qui définit l'algorithme 57

Page 58: Design patterns

Visiteur (Visitor)

Objectifs: Séparer un algorithme d'une structure de données.

Quand Utiliser: Il est nécessaire de réaliser des opérations, sur les éléments d'un objet structuré, qui varient en fonction de la nature de chaque élément et peuvent être de plusieurs types.

Exemple: Cas d'un logiciel d'images de synthèse. L'image composée de plusieurs objets : sphère, polygone, etc... Sur chaque élément, il faut effectuer plusieurs opérations pour le rendu : ajout des couleurs, effet d'éclairage, …

Résultat: Isole les algorithmes appliquées sur des structures de données

58

Page 59: Design patterns

Visiteur (Visitor)

La partie cliente appelle les méthodes de réception d'un Visiteur des Element. 59