Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Design Patterns en PHP
  3. Introduction aux design patterns de structuration
Extrait - Design Patterns en PHP Les 23 modèles de conception : descriptions et solutions illustrées en UML2 et PHP (2e édition)
Extraits du livre
Design Patterns en PHP Les 23 modèles de conception : descriptions et solutions illustrées en UML2 et PHP (2e édition)
1 avis
Revenir à la page d'achat du livre

Introduction aux design patterns de structuration

Présentation

L’objectif des design patterns de structuration est de faciliter l’indépendance de l’interface d’un objet ou d’un ensemble d’objets vis-à-vis de son implémentation. Dans le cas d’un ensemble d’objets, il s’agit aussi de rendre cette interface indépendante de la hiérarchie des classes et de la composition des objets.

En fournissant des interfaces, les design patterns de structuration encapsulent la composition des objets, augmentant le niveau d’abstraction du système à l’image des design patterns de création qui encapsulent la création des objets.

L’encapsulation de la composition est réalisée non pas en structurant l’objet lui-même mais en transférant cette structuration à un second objet. Celui-ci est fortement lié au premier objet. Ce transfert de structuration signifie que le premier objet détient l’interface exposée aux clients et gère la relation avec le second objet qui lui gère la composition et n’a aucune interface avec les clients externes.

Cette réalisation offre une autre propriété qui est la souplesse de la composition qui peut être modifiée dynamiquement. En effet, il est aisé de substituer un objet par un autre, pourvu qu’il dérive de la même classe ou qu’il...

Composition statique et dynamique

Nous prenons l’exemple des aspects d’implémentation d’une classe. Nous nous plaçons dans un cadre où il est possible d’avoir plusieurs implémentations possibles. La solution classique consiste à les différencier au niveau des sous-classes. C’est le cas de l’utilisation d’une interface par plusieurs classes d’implémentation comme l’illustre le diagramme des classes de la figure 9.1.

Cette solution consiste à réaliser une composition statique. En effet, une fois que le choix de la classe d’implémentation d’un objet est effectué, il n’est plus possible d’en changer.

Implémentation d’un objet passant contrat avec une interface

Figure 9.1 - Implémentation d’un objet passant contrat avec une interface

Comme expliqué dans la précédente section, une autre solution est de séparer l’aspect d’implémentation dans un autre objet comme l’illustre la figure 9.2. Les parties d’implémentation sont gérées par une instance de la classe ImplantationConcreteA ou par une instance de la classe ImplantationConcreteB. Cette instance est référencée par l’attribut implantation. Elle peut être substituée facilement par une autre instance lors de l’exécution. Par conséquent, la composition est dynamique.

images/figure9-2.png

Figure 9.2 - Implémentation...