Design
Patterns(Leçon2)
Imène Ferchichi
Design Patterns
de Structure
Facade
Adapter
Decorateur
Composite
Proxy
Les patrons de Structure
C’est des modèles de conception qui décrivent comment les objets sont connectés les uns aux autres.
Pensez-y comme un plat alimentaire qui est composé de différents ingrédients et saveurs:
certains ingrédients disparaissent dans le goût global des aliments
d’autres sont toujours là et se distinguent sur la table
Décorateur - (Decorator) un DP permettant un comportement supplémentaire grâce à une
enveloppe à base de composants.
Façade - un DP qui consiste à encapsuler un système complexe dans une interface simple.
Adaptateur (Adapter) - un DP qui relie et adapte deux systèmes incompatibles
en fournissant une interface compatible avec les deux.
Proxy – tel un proxy sous réseaux, ce DP offre une enveloppe de sécurité et simplification
d’accès pour les classes clientes
Composition (Composite) - un modèle de conception pour composer des structures imbriquées
d’objets et traiter ces objets uniformément.
Le Facade
Design Pattern
Facade DP
Dans le monde réel, une façade pour un magasin est ce qui attire les clients et
leur donne des conseils sur les services qui les attendent dans un endroit donné.
Imaginez que vous marchez dans la rue et à la recherche d’un endroit pour avoir le
repas.
Que cherchez vous ?
Naturellement, un panneau sur la face d’un bâtiment qui indique que cet espace peut
vous servir de repas.
Le même concept s’applique aux sites d’achats en ligne, par exemple:
Nous sommes à la recherche de points d’entrée dans l’interface du site: L’endroit où
commencer nos achats (la devant du magasin)
(i) Quand un serveur prend et passe votre commande,
ou (ii) quand une plate-forme de vente en ligne envoie votre commande pour être
traitée, ils agissent tel une façade en cachant tout le travail supplémentaire à faire.
Facade DP
Il est destiné à cacher la complexité d’un sous-système en
l’encapsulant derrière un wrapper unificateur appelé classe façade.
Élimine la nécessité pour les classes clients de gérer elles-
mêmes un sous système, ce qui entraîne moins de couplage entre
le sous-système et les classes clients.
Gère la réorientation des tâches vers la classe appropriée au
sein du sous-système.
Fournit aux classes client une interface simplifiée pour le sous-
système.
Agit simplement comme un point d’entrée à un sous-système et
n’ajoute pas plus de fonctionnalités au sous-système.
En fournissant une interface plus simple à travers une
façade, les classes clients auront plus de facilité à utiliser
avec succès notre logiciel.
Facade DP: Exemple
Gestion des packs dans une agence de voyage
Quiz sur Facade DP
Quels sont les principes de conception clés utilisés pour mettre en
œuvre le DP façade?
A. Encapsulation, implémentation d’interfaces, dissimulation d’informations, héritage
B. Héritage, dissimulation d’informations, séparation des préoccupations, généralisation
C. Encapsulation, dissimulation d’informations, séparation des préoccupations
D. Dissimulation d’informations, encapsulation, généralisation, couplage
Quelles sont les deux conditions requises pour utiliser le DP façade?
A. Vous avez besoin d’une classe pour agir comme interface entre votre sous-système et une classe client.
B. Vous devez simplifier l’interaction avec votre sous-système pour les classes clients.
C. Vous avez besoin d’une classe qui pourra instancier d’autres classes au sein de votre système et
fournira ces instances à une classe de clients.
D. Vous avez besoin d’une classe pour traduire des messages entre deux sous systèmes existants parce
que l’un d’entre eux s’attend à une interface spécifique à utiliser, mais est fourni avec une interface qui est
non compatible.
Adapter
Design Pattern
Adapter DP
Une situation courante que vous avez peut-être:
Lorsque vous avez un appareil qui s’attend à une sorte de
connecteur, mais vous avez quelque chose qui fournit un connecteur
différent.
En raison de l’inadéquation, vous ne pouvez pas faire ce lien.
Ainsi, vous aurez besoin d’un adaptateur pour cela,
Les adaptateurs sont fréquemment utilisés parce que différents
fournisseurs auront des connecteurs différents et évolutifs pour
leurs appareils.
Par exemple, un connecteur commun pour un périphérique,
comme un clavier, était autrefois PS2.
Mais les ordinateurs au milieu des années 1990 ont commencé à
prendre en charge uniquement le port USB, alors, les gens
avaient besoin d’un adaptateur pour les nouveaux ordinateurs.
Adapter DP
Physiquement, un adaptateur est un dispositif qui est utilisé pour connecter des pièces
d’équipement qui ne peuvent pas être connectées directement .
Les systèmes logiciels peuvent faire face à des problèmes similaires:
Les systèmes peuvent avoir des interfaces logicielles incompatibles.
La sortie d’un système peut ne pas être conforme à l’apport attendu d’un autre
système.
Cela se produit fréquemment lorsqu’un système préexistant doit intégrer des
bibliothèques tierces ou doit se connecter à d’autres systèmes..
Le DP structurel d’Adaptateur facilite la communication entre deux
systèmes existants en fournissant une interface compatible.
Adapter DP: Principe
Le client , est une partie du système qui veut utiliser un
système externe ou une bibliothèque tierce.
l’Adaptee est la classe invoquée et qui appartient au
système extérieur .
L’Adapter est la classe entre le client et l’Adaptee.
Elle implémente l’interface que le client va utiliser et traduit ce
que le client s’attend à avoir.
Le client envoie une requête à l’Adapter utilisant l’interface.
L’Adapter traduit la requête à l’Adaptee .
Adapter DP
Imaginez un type de téléviseur intelligent qui n'a pas de port AV
mais qui prend en charge l'entrée vidéo HDMI. Vous avez un vieil
ordinateur portable avec une sortie AV et vous voulez lire MP4 sur
le grand écran à la télévision.
La solution est un adaptateur:
Cela signifie que l'adaptateur de conversion AV vers HDMI
est utilisé pour résoudre le problème.
Essayez d'implémenter l’exemple en parcourant le diagramme
de classes suivant:
Le Décorateur
Design Pattern
Décorateur DP
Beaucoup d’entre nous consomment du café. Et, oui, je suis un accro de café!
-La plupart du temps, j’aime boire une tasse ordinaire de « café noir ».
-Parfois, je peux passer à « cappuccino ». Je peux aussi essayer d’autres saveurs et
goûts selon les choix disponibles et les humeurs.
Le café peut également être mélangé avec d’autres ingrédients comme « lait »,
« chocolat », crème aromatisée », etc.
Il peut également venir dans différents « Degrés Celsius » de « chaud » à « froid ».
Avec tous ces choix différents, un élément est toujours nécessaire : « la caféine »
provenant des noix de cacao.
Quel que soit le type de café que nous buvons, les effets de chaque ingrédient ajouté
ne changent pas l’essence initiale du café: Il agira toujours comme un stimulant.
Chaque ingrédient détient ses propres caractéristiques, et en les combinant, on crée
une nouvelle boisson qui pourrait être plus agréable qu’un simple café basique.
Décorateur DP
Problème!!:
Imaginons le cas d’un concessionnaire de voiture qui propose de vendre des voitures sans options et d’autres
avec options.
A chaque fois il veut ajouter un model de voiture, une option ou une combinaison d’options on a besoin d'ajouter
de nouvelles classes.
Le diagramme de classes suivant montre la conception du système déjà décrit.
Décorateur DP :Exemple
Décorateur DP :Solution
Solution:
Decorator
DP
Décorateur DP
Problème!!:
On ne peut pas effectuer des changements aux classes quand le programme est encours d’exécution!.
On a besoin d'ajouter de nouvelles classes pour ajouter de nouveaux voir des combinaisons de comportements,
mais avoir beaucoup de combinaison implique avoir beaucoup de classes chose qui n'est pas appréciée!.
Solution:
Le patron de conception décorateur est la solution. Son implémentation est la suivante:
Etape1: Concevoir le composant Interface.
Etape2: Implémenter l’interface avec les classes concrètes de votre classe composant de base.
Etape3: Implémenter l’interface avec la classe abstraite décorateur.
Etape4: Hériter de la classe abstraite décorateur et implémenter le composant interface avec les classes
concrètes du décorateur.
Décorateur DP
Avec le patron Décorateur:
On peut créer plusieurs composants concrets.
On peut étendre les fonctionnalités de nos composants
grâce au décorateur.
Le décorateur est une classe abstraite qui hérite de
Composant et qui a un attribut Composant.
Chaque Décorateur Concret redéfinie les méthodes de
Décorateur.
Le Composite
Design Pattern
Composite DP
Le DP de Composition fournit une conception pour une hiérarchie, dans laquelle les nœuds ayant des enfants
diffèrent dans leur comportements des nœuds sans enfants.
Un exemple qui présente une hiérarchie: un système de fichiers, où les dossiers peuvent contenir des fichiers.
Les dossiers seraient affichés différemment des fichiers et auraient du contenu (les fichiers).
Ce modèle se compose de trois classes:
La classe Composite (le nœud qui peut avoir des enfants),
La classe Leaf (Feuille: donc sans enfants),
Et la classe Component, qui est une superclasse étendue à la fois par les classes composite et Leaf.
Le composite a une collection de composants, de sorte que la classe Composite peut boucler à travers ses
composants sans obligation de savoir si le composant est un composite ou une feuille.
Le Composite dispose également d’une méthode addComponent() afin que des composants puissent être
ajoutés à son contenu.
Pourquoi un composant (Component)? Sans l’abstraction de la super classe composant, le Composite devrait
maintenir des listes différentes pour chaque type d’élément dans son contenu,
Il faudrait alors fournir des méthodes individuelles pour ajouter du contenu et afficher du contenu pour chaque
type de contenu.
Composite DP
La conception de base suivante est utilisée :
-Une interface appelée Component sert de super type pour
l’ensemble des classes
-Une classe nommée Composite est également présente: cette
classe est utilisée pour regrouper (agrégation) n’importe quelle
classe qui implémente l’interface de composants (components).
-Elle vous permet de « traverser » et « potentiellement
manipuler » les objets composants que l’objet composite
contient.
-Une classe leaf (feuille) représente un type non composite.
Elle n’est pas composé d’autres composants.
Composite DP
On veut créer une playlist de chansons pop, pour cela on va
implémenter le diagramme de classe suivant:
-Une interface appelée IComponent sert de super type pour
l’ensemble des classes.
-Une classe nommée Playlist : cette classe est une liste de
composants.
-Une classe Song: représente la classe chanson.
Implémenter le diagramme de classes suivant en java.
Le Proxy Design
Pattern
Proxy DP
Un proxy est quelque chose qui agit comme une version simplifiée, ou légère de l’objet original.
Le DP proxy permet à une classe proxy de représenter une véritable classe de « sujet ».
Un objet proxy peut effectuer les mêmes tâches qu’un objet original, mais peut aussi déléguer des
taches spécifiques à l’objet original pour les réaliser.
Dans ce DP, la classe proxy enveloppe la classe de sujets réelle.
Une référence à une instance de la classe de sujet réel est cachée par la classe proxy.
L’objet réel habituellement:
-Contient des informations sensibles et fait partie du système logiciel,
-Serait gourmand en ressources pour qu’il ne soit instancié.
Comme la classe proxy est une enveloppe représentative, les classes clientes interagissent avec elle au
lieu de la classe de sujet réel.
Proxy DP
Le DP proxy permet de :
Reporter la création d’objets à forte intensité de ressources
jusqu’à ce que nécessaire,
Contrôler l’accès à des objets spécifiques, ou lorsque qu’il
y a besoin d’un intermédiaire pour agir comme une
représentation locale d’un système distant.
Rendre les systèmes plus sûrs et moins gourmands en
ressources.
L’Implémentation de ce DP peut être décomposée en 3 étapes:
1. Concevoir l’interface Subject.
2. Implémenter la classe RealSubject.
3. Implémenter la classe Proxy.
Proxy DP
Exemple du monde réel:
Une carte de crédit joue le rôle d’un proxy pour un
compte bancaire qui est lui-même un proxy pour
l’argent.
Les deux carte bancaire et argent cash implémentent
la même interface: ils sont utilisés pour effectuer le
paiement.