Qu'est-ce qu'un design pattern ?
Un design pattern (patron de conception) est une solution eprouvee et reutilisable a un probleme de conception recurrent en developpement logiciel. Les design patterns ne sont pas du code pret a l'emploi mais des modeles conceptuels adaptables. Ils ont ete formalises par le "Gang of Four" (GoF) dans le livre "Design Patterns: Elements of Reusable Object-Oriented Software" (1994) qui decrit 23 patterns classes en trois categories.
Patterns creationnels
Les patterns creationnels gerent la creation d'objets. Singleton : garantit une instance unique d'une classe (controversee, souvent remplace par l'injection de dependances). Factory Method : delegue la creation a des sous-classes. Abstract Factory : cree des familles d'objets lies sans specifier leurs classes concretes. Builder : construit des objets complexes etape par etape (utile pour les objets avec de nombreux parametres optionnels). Prototype : cree des objets en clonant un prototype existant.
Patterns structurels
Les patterns structurels organisent les relations entre objets. Adapter : convertit l'interface d'une classe en une autre attendue par le client. Decorator : ajoute dynamiquement des responsabilites a un objet sans modifier sa classe. Facade : fournit une interface simplifiee a un sous-systeme complexe. Proxy : controle l'acces a un objet (lazy loading, caching, securite). Composite : traite les objets individuels et les compositions uniformement (arbres).
Patterns comportementaux
Les patterns comportementaux gerent la communication entre objets. Observer : notification automatique des dependants quand l'etat change (event systems, reactive programming). Strategy : encapsule des algorithmes interchangeables. Command : encapsule une requete comme objet (undo/redo, file de commandes). Iterator : parcourt une collection sans exposer sa structure interne. State : modifie le comportement d'un objet quand son etat change.
Patterns modernes et critiques
Au-dela du GoF, des patterns modernes ont emerge : Repository (abstraction de l'acces aux donnees), Dependency Injection (inversion du controle), CQRS (separation lecture/ecriture), Event Sourcing (historique d'evenements). Les critiques des design patterns soulignent qu'ils compensent parfois les limitations du langage (les closures de JavaScript rendent le pattern Strategy trivial) et que leur usage excessif ajoute de la complexite inutile. Utilisez-les quand le probleme qu'ils resolvent est reel, pas par anticipation.