Hello,
Je vais tenter de faire une réponse globale en espérant répondre à à peu près tout.
Un design pattern, c’est la réponse communément acceptée à un problème donné dans un cadre donné de modélisation objet. Les patterns apportent des éléments de langage que tu peux utiliser pour décrire les internes et en une certaine mesure les externes d’un soft.
Si tu modélises les concepts de ton programme à partir d’objets, que la nature de ces objets soit vérifiée à la compilation (typage statique) ou à l’exécution (typage dynamique), la modélisation reste la même. Un typage dynamique n’est en rien incompatible avec la modélisation objet, pour exemple le langage ultime de la modélisation objet: smalltalk qui est un langage à typage dynamique. Il est même courant d’utiliser des design pattern dans des langages qui n’implémentent pas l’approche objet (ex: C).
Beaucoup de langages orientés objet n’implémentent pas forcément une approche objet pure et proposent souvent d’autres concepts (ex: l’approche fonctionnelle, d’autres concepts comme les traits, …). La question devrait à mon avis ne pas être «est-ce que je dois apprendre les design pattern ?» mais «comment est-ce que je dois les apprendre ?»
La réponse à cette question est à mon avis la suivante :
Programme, lis des programme, participe à la construction de gros logiciels. Identifie les problématiques de modélisation qui apparaissent et demande toi quelle est la façon la plus élégante d’y répondre. Dans beaucoup de cas, tu auras un design pattern qui pourra s’appliquer, d’où la bible du GoF.
Maintenant que tu as identifié le problème, une solution possible, demande toi si cette solution est la plus pragmatique. Si c’est le cas, implémente la. Sinon prend l’autre solution plus pratique.
Je pense que de bonnes références pour approfondir ce type de sujet c’est les livres sur le refactoring.
Souviens toi que l’important lorsque l’on programme, c’est pas le nombre de lignes que l’on peut économiser, mais la maintenabilité du code écrit. Un logiciel peut vivre des années pendant lesquelles de nouveaux concepts peuvent émerger. Tu dois te préparer à pouvoir remanier l’existant pour t’y adapter, même si tu ne les connais pas encore. À ce niveau là, les patterns sont un outil pour t’y aider. Pour exemple, je bosse sur un outil énorme qui a plus de 10 ans où se mêlent java, C, js (serveur), bash (awk, …), ruby, python, et probablement d’autres que j’oublie. Monter en compétence sur le projet demande plusieurs mois, voire années et lorsque l’on tombe sur un pattern que l’on reconnaît, c’est quand même agréable de sortir un peu de ce brouillard de spaghetti…
Maintenant, le fait que tu n’ais pas d’interfaces ou que le typage soit moins contraignant, ce n’est que des contraintes en plus ou en moins dans l’implémentation des patterns.
Voilà grosso modo, j’espère avoir pu éclairer ta lanterne. Bon courage