Résumé
Une fabrique qui crée des profils à partir d’une chaîne, administrateur, RH, anonyme, commence presque toujours par un switch. Il marche, puis chaque nouveau profil ajoute un cas, et la complexité de la classe grandit avec le catalogue. Cet article montre comment sortir de cette spirale en Java, en quatre étapes.
L’idée est de remplacer le switch par une map d’interfaces fonctionnelles. Un Supplier par profil, alimenté par des références de méthode comme Admin::new, et la création devient une simple recherche avec un profil par défaut en cas d’absence. Ajouter ou retirer un profil ne touche plus aucune logique de branchement: la complexité reste stable. Quand le constructeur prend un argument, Function remplace Supplier; quand il en prend plusieurs, une petite interface fonctionnelle dédiée fait l’affaire.
La dernière étape va plus loin: une énumération qui porte, pour chaque constante, la fonction de création, et une recherche par valueOf avec un repli sur le profil anonyme quand le nom est inconnu. C’est la version que je trouve la plus élégante et la plus efficace, et le dépôt qui accompagne l’article garde une branche par étape pour suivre le raisonnement.
Le sujet est petit, la leçon ne l’est pas: le polymorphisme et les lambdas servent d’abord à retirer des conditions, et une classe dont la complexité ne bouge pas quand le métier s’étend est une classe qu’on peut maintenir.
Idées clés
- Un switch dans une fabrique grandit avec chaque nouveau type; la complexité de la classe suit le catalogue.
- Une map de Supplier alimentée par des références de méthode remplace le switch, et la complexité cesse de dépendre du nombre de profils.
- Function pour un argument, une interface fonctionnelle dédiée pour plusieurs: le même principe s’étend aux constructeurs paramétrés.
- Une énumération qui porte sa fonction de création, avec valueOf et un repli par défaut, est la version la plus élégante.
Pourquoi j’ai écrit cet article
Pour montrer comment sortir du switch par lequel toute fabrique commence, et dont la complexité grandit à chaque nouveau type, avec les seules interfaces fonctionnelles et références de méthode de Java, jusqu’à la forme énumération, la plus élégante des quatre étapes.