Informatique

Design Patterns

Les patterns de conception essentiels en programmation

La Factory en action

Clique sur un appel : la fabrique choisit la classe concrète et produit l'objet.

AnimalFactory Woof ! Le client appelle createAnimal(type) — sans jamais faire de new lui-même Objets produits : 0
new Dog()

createAnimal('dog') → la Factory instancie la classe Dog.

Patterns de Conception Essentiels

🔨 Singleton

Une seule instance de la classe dans toute l'application.

public class Database {
    private static Database instance;
    private Database() {} // Constructeur privé
    public static Database getInstance() {
        if (instance == null) {
            instance = new Database();
        }
        return instance;
    }
}

Utilisation : Connexion BDD, Logger, Config...

🏭 Factory

Créer des objets sans spécifier leur classe exacte.

interface Animal { void speak(); }
class Dog implements Animal { 
    public void speak() { System.out.println("Woof!"); }
}
class Cat implements Animal { 
    public void speak() { System.out.println("Meow!"); }
}
class AnimalFactory {
    public Animal createAnimal(String type) {
        if (type.equals("dog")) return new Dog();
        if (type.equals("cat")) return new Cat();
        return null;
    }
}

👁️ Observer

Notification automatique quand un objet change d'état.

interface Observer {
    void update(String message);
}
class Subject {
    private List<Observer> observers = new ArrayList<>();
    public void attach(Observer o) {
        observers.add(o);
    }
    public void notifyObservers(String msg) {
        for (Observer o : observers) {
            o.update(msg);
        }
    }
}

Utilisation : UI events, pub/sub, real-time updates...

L'Observer en direct

Clique sur un observateur pour l'abonner / le détacher, puis déclenche une notification.

état 1 Subject (émetteur) 1 obsA 1 obsB 1 obsC

3 observateurs abonnés. Change l'état du Subject pour les notifier.

🧱 Builder

Construire des objets complexes étape par étape.

User user = new User.Builder()
    .setName("Alice")
    .setEmail("alice@example.com")
    .setAge(25)
    .build();

🎯 Strategy

Algorithmes interchangeables à runtime.

interface PaymentStrategy {
    void pay(int amount);
}
class CreditCard implements PaymentStrategy {
    public void pay(int amount) { /* paiement CB */ }
}
class PayPal implements PaymentStrategy {
    public void pay(int amount) { /* paiement PayPal */ }
}

🎮 Quiz Interactif !

Réponds aux questions et apprends en t'amusant !

💡 Feedback immédiat après chaque réponse

📚

La meilleure ressource en ligne

Pour approfondir les Design Patterns

Refactoring.Guru est LA référence incontournable pour apprendre les Design Patterns. Explications claires, diagrammes UML, exemples de code dans plusieurs langages.

Visiter Refactoring.Guru
Glisser pour continuer vers Graphes & Récursivité
⬇️
Bachelor Informatique