Menu
Coddy logo textTech

Introduction aux patrons de conception

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 70 sur 91.

Les modèles de conception sont des solutions éprouvées à des problèmes courants que les développeurs rencontrent régulièrement lors de la création de logiciels. Plutôt que de réinventer la roue à chaque fois, vous pouvez appliquer ces modèles établis pour résoudre des problèmes similaires dans votre propre code.

Considérez les patrons de conception comme des recettes. Tout comme un chef suit une recette pour créer un plat perfectionné au fil du temps, les développeurs utilisent les patrons de conception pour structurer leur code de manière éprouvée et affinée par d’innombrables programmeurs avant eux.

Les patrons de conception sont généralement regroupés en trois catégories :

Catégorie Objectif Exemples
Création Comment les objets sont créés Singleton, Factory
Structurel Comment les objets sont composés Adapter, Decorator
Comportemental Comment les objets communiquent Observer, Strategy

Vous avez en fait utilisé des modèles tout au long de ce cours sans vous en rendre compte. Lorsque vous avez créé des classes abstraites avec des méthodes que les classes enfants doivent implémenter, vous appliquiez une forme du modèle Template Method. Lorsque vous avez utilisé des interfaces pour définir des contrats, vous prépariez la mise en place du modèle Strategy.

Apprendre les patrons de conception vous donne un vocabulaire commun avec les autres développeurs. Au lieu d’expliquer une structure complexe en détail, vous pouvez simplement dire « J’ai utilisé ici le patron Factory » et les développeurs expérimentés comprendront immédiatement votre approche. Dans les leçons suivantes, nous implémenterons plusieurs patrons essentiels en PHP.

challenge icon

Défi

Facile

Construisons un système simple de formatage de messages qui montre comment les patrons de conception aident à organiser le code. Tu identifieras à quelle catégorie de patrons appartient chaque composant et tu verras comment les différentes parties d’un système fonctionnent ensemble.

Tu organiseras ton code sur trois fichiers :

  • MessageFormatter.php : crée une interface appelée MessageFormatter qui définit un contrat pour le formatage des messages. Elle doit avoir une seule méthode format(string $message): string. Cela représente la catégorie comportementale. Elle définit la manière dont les objets communiquent et traitent les données.
  • Formatters.php : inclus le fichier MessageFormatter et crée deux classes qui implémentent l’interface :
    • UppercaseFormatter : sa méthode format() renvoie le message converti en majuscules
    • BracketFormatter : sa méthode format() entoure le message de crochets, comme dans [message]
  • main.php : inclus le fichier Formatters. Tu recevras deux entrées : une chaîne de caractères représentant un message et un type de formateur ("upper" ou "bracket").

    Crée une fonction appelée processMessage qui accepte un MessageFormatter et une chaîne de caractères représentant un message, puis renvoie le résultat formaté. Cette fonction n’a pas besoin de savoir quel formateur précis elle reçoit. Elle appelle simplement format() sur l’objet qui lui est transmis.

    En fonction de l’entrée indiquant le type de formateur, crée l’objet formateur approprié. Transmets-le à ta fonction processMessage avec le message, puis affiche le résultat.

    Sur une nouvelle ligne, affiche la catégorie de patrons que cette structure représente. Puisque nous définissons des comportements interchangeables au moyen d’une interface, affiche : Pattern category: Behavioral

Ce défi montre comment les interfaces te permettent de remplacer des implémentations sans modifier le code qui les utilise : c’est une base pour des patrons comme Strategy, que tu exploreras dans les prochaines leçons.

Essayez vous-même

<?php
require_once 'Formatters.php';

// Lire l'entrée
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: Créer une fonction appelée processMessage qui accepte un MessageFormatter
// et une chaîne de message, puis retourne le résultat formaté


// TODO: Basé sur $formatterType ("upper" ou "bracket"), créer le formateur approprié


// TODO: Appeler processMessage avec le formateur et le message, puis afficher le résultat


// TODO: Print the pattern category on a new line
// Format: "Pattern category: Behavioral"

?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur PHP en ligne