Académique Documents
Professionnel Documents
Culture Documents
07 - Patrons Part2 Structure
07 - Patrons Part2 Structure
9
DP Adapter
• Intention
– Convertir l’interface d’une classe en une autre interface qui est
attendue par un client.
– Permet de faire collaborer des classes qui n’auraient pas pu le faire
à cause de l’incompatibilité de leurs interfaces
• Synonymes : Wrapper, Mariage de convenance
• Motivation
– Une classe de bibliothèque conçue pour la réutilisation ne peut pas
l’être à cause d’une demande spécifique de l’application
• Champs d’application
– Volonté d’utiliser une classe, même si l’interface ne convient pas
– Création d’une classe qui va coopérer par la suite…
Fréquence :
11
DP Adapter : structure
• Participants
– Target définit l’interface spécifique à l’application que le client
utilise
– Client collabore avec les objets qui sont conformes à
l’interface de Target
– Adaptee est l’interface existante qui a besoin d’adaptation
– Adapter adapte effectivement l’interface de Adaptee à
l’interface de Target
P. Collet 12
DP Adapter : Comportement
13
DP Adapter : Structure
Class adapter
Cette mise en œuvre utilise l'héritage : l'adaptateur hérite des interfaces des
deux objets en même temps.
14
DP Adapter : Implementation(s)
• En Java, utilisation combinée de extends/implements
• Patterns associés
– Bridge, Decorator, Proxy
P. Collet 15
DP Adapter en résumé
Conséquences (adapter objet)
1. Un adapter peut travailler avec plusieurs Adaptees
2. Plus difficile de redéfinir le comportement d’Adaptee (sous-
classer puis obliger Adapter à référencer la sous-classe)
• Conséquences (adapter classe)
1. Pas possible d’adapter une classe et ses sous-classes
2. Mais redéfinition possible du comportement (sous-classe)
P. Collet 16
Composite is a
structural design
pattern that lets you
compose objects into
tree structures and
then work with these
structures as if they
were
individual objects.
DP COMPOSITE
17
IMAGE : https://refactoring.guru/design-patterns/
DP Composite : le problème dans un exemple
https://refactoring.guru/design-patterns 18
DP Composite : la solution dans un exemple
https://refactoring.guru/design-patterns 19
DP Composite
• Intention
– Composer des objets dans des structures d’arbre pour représenter
des hiérarchies composants/composés
– Composite permet au client de manipuler uniformément les objets
simples et leurs compositions
• Champs d’application
– Représentation de hiérarchie composants/composés
– Les clients doivent ignorer la différence entre les objets simples et leurs
compositions (uniformité apparente)
Fréquence :
DP DECORATOR
Famille structure
27
IMAGE : https://refactoring.guru/design-patterns/
DP Decorator : le problème dans un exemple
• Utilisations connues
– Organisation de java.io
• Patterns associés
– Adapter, Composite, Strategy
M. Blay-Fornarino & P. Collet 37
DP Decorator : Component (Code Example)
DP FACADE
43
IMAGE : https://refactoring.guru/design-patterns/
DP Façade
• Intention
– Fournir une interface unique, simplifiée ou unifiée,
pour accéder à un ensemble d’interfaces d’un sous-
système complexe.
• Motivation
– Réduire la complexité d’un système en le découpant
en plusieurs sous-systèmes
– Eviter la dépendance entre les clients et les éléments
du sous-système
Fréquence :
P. Collet 44
Façade (2)
• Champs d’application
– Fournir une interface unique pour un système complexe
– Séparer un sous-système de ses clients
– Découper un système en couches (une façade par point d’entrée
dans chaque couche)
P. Collet 45
DP Façade : Structure
P. Collet 46
DP Façade : Structure
• Participants
– La Façade connaît quelles classes du sous-système sont
responsables de telle ou telle requête, et délègue donc les requêtes
aux objets appropriés
– Les classes sous-jacentes à la façade implémentent les
fonctionnalités
Le nombre de classes n’est pas limité
• Collaborations
– Le client manipule le sous-système en s’adressant à la façade (ou
aux éléments du sous-système rendus publics par la façade)
– La façade transmet les requêtes au sous-système après
transformation si nécessaire
P. Collet 47
DP Façade : implementations
• Possibilité de réduire encore plus le couplage en créant
une façade abstraite et des versions concrètes
• Les objets de façade sont souvent des singletons
• Utilisations connues
– JDBC…
• Patterns associés
– Abstract Factory, Mediator, Singleton
P. Collet 48
public abstract class DwarvenMineWorker { case WORK:
work();
public void goToSleep() { break;
LOGGER.info("{} goes to sleep.", name()); default:
} LOGGER.info("Undefined action");
break;
public void wakeUp() { }
LOGGER.info("{} wakes up.", name()); }
}
/**
public void goHome() { * Perform actions.
LOGGER.info("{} goes home.", name()); */
} public void action(Action... actions) {
Arrays.stream (actions).forEach(this::action);
public void goToMine() { }
LOGGER.info("{} goes to the mine.", name());
} public abstract void work();
P. Collet 52
Quelques patrons de Structure
Objectif
Création Structure Comportement
Portée Classe Factory Adapter Interpreter
Method Template Method
Objet Abstract Adapter Chain of Responsibility
Factory Bridge Command
Builder Composite Iterator
Prototype Decorator Mediator
Singleton Facade Memento
Flyweight Observer
Proxy State
Strategy
Visitor
M. Blay-Fornarino & P. Collet 53
Proxy is a structural design
pattern that lets you provide a
substitute or placeholder for
another object. A proxy controls
access to the original object,
allowing you to perform
something either before or after
the request gets through to the
original object.
DP PROXY
Famille Structure
54
IMAGE : https://refactoring.guru/design-patterns/ M. Blay-Fornarino & P. Collet
DP Proxy : le problème dans un exemple
• L'accès à un objet doit être
contrôlé.
• Des fonctionnalités
supplémentaires doivent être
fournies lors de l'accès à un objet.
Exemples
Si un objet, comme une image volumineuse, met beaucoup de temps
à se charger
Si un objet est situé sur une machine distante
Si un objet a des droits d’accès spécifiques
https://refactoring.guru/design-patterns 55
DP Proxy : La solution dans un exemple
Définissez un objet Proxy distinct qui peut
être utilisé comme substitut d'un autre
objet (Sujet) et implémente des
fonctionnalités supplémentaires pour
contrôler l'accès à ce sujet.
https://refactoring.guru/design-patterns 56
DP Proxy
• Intention
– Fournir un substitut afin d’accéder à un autre objet souvent
inaccessible.
– Séparer l ’interface de l’implémentation
• Synonyme
– Procuration, mandat, ambassadeur, surrogate
Fréquence :
• Patterns associés
– Adapter, Decorator
– Access Proxy, Remote Proxy, Virtual Proxy, SmartReference
P. Collet 67