Design Patterns

 

1       Origine du concept 1

2       Patron de conception logicielle. 2

3       Documentation d’un patron de conception. 2

3.1        Avantages des patrons de conception. 2

3.2        InconvĂ©nients des patrons de conception. 2

4       Types de patrons de conception : 2

4.1        Patrons de crĂ©ation (Creational Patterns). 3

4.2        Patrons structurels (Structural Patterns). 3

4.3        Patrons comportementaux (Behavioral Patterns). 3

5       Exemples. 4

5.1        Singleton. 4

5.2        Strategy. 4

5.3        Composite. 5

 

1          Origine du concept

Le concept de patron de conception trouve son origine dans l’architecture. En 1977, Christopher Alexander, architecte, définit les patrons de conception comme :

  • La description d’un problème rĂ©current et de sa solution.
  • Une solution pouvant ĂŞtre utilisĂ©e des millions de fois sans jamais ĂŞtre exactement identique.
  • Une forme de conception, un pattern ou modèle.

Ce concept a attiré l’attention des chercheurs en programmation orientée objet dès les années 1980.

Le terme est popularisé par le GOF (Gang of Four) : Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides, dans leur ouvrage Design Patterns: Elements of Reusable Object-Oriented Software, publié chez Addison-Wesley en 1995.

 

2          Patron de conception logicielle

Un patron de conception (design pattern) est la description d’une solution classique à un problème récurrent.

  • Il dĂ©crit une partie de la solution, en prĂ©cisant ses relations avec le système et les autres parties.
  • Il s’agit d’une technique d’architecture logicielle, et non pas :
    • Une brique : l’application d’un pattern dĂ©pend de l’environnement.
    • Une règle : un pattern ne s’applique pas mĂ©caniquement.
    • Une mĂ©thode : il ne guide pas la prise de dĂ©cision ; il reprĂ©sente une dĂ©cision dĂ©jĂ  prise.

 

3          Documentation d’un patron de conception

Les principaux éléments de description d’un pattern sont :

  • Nom du pattern : rĂ©sume le problème de conception.
  • Intention : courte description des objectifs et de la raison d’être du pattern.
  • Indications d’utilisation : situations oĂą le pattern peut ĂŞtre utile.
  • Motivation : illustre un cas particulier d’utilisation du pattern.
  • Structure : reprĂ©sentation graphique des classes du modèle.

 

3.1        Avantages des patrons de conception

  • Capitalisation de l’expĂ©rience : rĂ©utilisation de solutions Ă©prouvĂ©es.
  • Gain de temps : accĂ©lĂ©ration de la con

3.2        InconvĂ©nients des patrons de conception

  • NĂ©cessitĂ© d’un effort de synthèse important pour identifier et abstraire les patterns pertinents.
  • Apprentissage et expĂ©rience indispensables pour les utiliser correctement.
  • Les patterns peuvent se dissoudre lorsqu’ils sont appliquĂ©s.
  • Nombre Ă©levĂ© de patterns : 23 dans l’ouvrage du GOF, d’autres sont publiĂ©s rĂ©gulièrement, parfois similaires.
  • Certains patterns sont interdĂ©pendants : certains s’appuient sur d’autres patterns.

4          Types de patrons de conception :

 

4.1        Patrons de crĂ©ation (Creational Patterns)

Ces patrons concernent la manière dont les objets sont créés, en cachant la complexité d’instanciation et en rendant le système plus flexible.
Exemples :

·         Singleton : assure une seule instance d’une classe.

·         Factory Method : dĂ©finit une interface pour crĂ©er un objet, mais laisse les sous-classes dĂ©cider de la classe concrète Ă  instancier.

·         Abstract Factory : fournit une interface pour crĂ©er des familles d’objets liĂ©s.

·         Builder : sĂ©pare la construction d’un objet complexe de sa reprĂ©sentation.

·         Prototype : crĂ©e des objets en copiant un prototype existant.

4.2         Patrons structurels (Structural Patterns)

Ces patrons concernent la composition des classes et objets pour former des structures plus grandes et flexibles.
Exemples :

  • Composite : permet de traiter de manière uniforme des objets simples et composĂ©s.
  • Adapter : adapte une interface existante Ă  une interface attendue.
  • Decorator : ajoute dynamiquement des responsabilitĂ©s Ă  un objet.
  • Facade : fournit une interface simplifiĂ©e Ă  un ensemble de classes.
  • Bridge : sĂ©pare l’abstraction de son implĂ©mentation pour qu’elles puissent Ă©voluer indĂ©pendamment.
  • Flyweight : rĂ©duit le nombre d’objets créés en partageant les instances similaires.
  • Proxy : fournit un substitut ou un reprĂ©sentant d’un objet pour contrĂ´ler l’accès.

 

4.3         Patrons comportementaux (Behavioral Patterns)

Ces patrons définissent la manière dont les objets interagissent et communiquent.
Exemples :

  • Strategy : encapsule des algorithmes interchangeables.
  • Observer : dĂ©finit une dĂ©pendance un-Ă -plusieurs entre objets pour notifier les changements.
  • Command : encapsule une requĂŞte sous forme d’objet.
  • Chain of Responsibility : passe une requĂŞte le long d’une chaĂ®ne d’objets jusqu’à ce qu’elle soit traitĂ©e.
  • Template Method : dĂ©finit l’ossature d’un algorithme et laisse certaines Ă©tapes aux sous-classes.
  • State : permet Ă  un objet de changer de comportement lorsque son Ă©tat change.
  • Mediator : centralise la communication entre objets pour rĂ©duire les dĂ©pendances directes.
  • Iterator : permet d’accĂ©der sĂ©quentiellement aux Ă©lĂ©ments d’une collection sans exposer sa structure interne.
  • Visitor : permet de sĂ©parer un algorithme de la structure sur laquelle il opère.

 

5          Exemples

5.1        Singleton

Le patron Singleton garantit qu’une classe n’a qu’une seule instance et fournit un point d’accès global à cette instance. Il est particulièrement utile lorsque l’on souhaite contrôler l’accès à une ressource partagée, comme une connexion à une base de données ou un gestionnaire de configuration. Le Singleton empêche la création multiple d’objets de la classe, ce qui assure une cohérence des données et évite des problèmes liés à la duplication des ressources.

public class Singleton {

    private static Singleton instance;

 

    private Singleton() {}

 

    public static synchronized Singleton getInstance() {

        if (instance == null) {

            instance = new Singleton();

        }

        return instance;

    }

}

 

 

5.2        Strategy

Le patron Strategy définit une famille d’algorithmes, encapsule chacun d’eux et les rend interchangeables. Il permet ainsi de séparer le comportement d’un objet de sa structure, offrant la possibilité de changer dynamiquement l’algorithme utilisé sans modifier le code de l’objet client. Ce pattern est utile pour gérer des variations de comportements ou d’algorithmes, comme différentes méthodes de tri, de calcul de tarif ou de traitement de paiement.

public interface DeliveryStrategy {

    double calculate(double distance);

}

public class StandardDelivery implements DeliveryStrategy {

    @Override

    public double calculate(double distance) {

        return distance * 1.0; // tarif standard

    }

}

 

public class ExpressDelivery implements DeliveryStrategy {

    @Override

    public double calculate(double distance) {

        return distance * 2.0; // tarif express

    }

}

 

5.3        Composite

Le patron Composite permet de traiter de manière uniforme des objets simples et des objets composés (agrégations d’objets). Il est particulièrement adapté aux structures hiérarchiques, comme des arbres de composants graphiques ou des systèmes de fichiers. Grâce au Composite, les clients peuvent manipuler un objet individuel ou un groupe d’objets de la même manière, ce qui simplifie le code et facilite l’extension des structures complexes.

 

 


Last modified: Friday, 26 December 2025, 6:44 PM