-
Design Patterns
salut à tous :)
Mon probleme c’est que j’ai pas pu faire une distinction entre l’utilité des différents Patterns :(
1. dans le pattern State : est ce que la classe abstraite Etat est en quelque sorte l’Observer (Pattern Observer) des états concrets ?
2. Le pattern abstract Factory n’est pas en qq sorte une Façade ?
Donc, une classe (parmi les classes qu’ajoutent les patterns) peut jouer deux rôles ou même plus ?
-
1 - Pattern State : la classe de base "Etat" n'est pas un observer de ces classes filles. Elle est seulement là pour représenter l'ensemble des évènements pouvant être reçus par la classe dont elle représente l'état. Ce peut être dans cette classe de base que tu implémente le comportement par défaut de toutes les méthodes. Ce comportement par défaut sera appelé si un objet appel une méthode de ta classe et que ta classe n'est pas dans un état où elle peut recevoir cet évènement. A toi de voir si ton code par défaut ne fait rien ou lève une exception.
2- L'abstract factory n'est pas une façade.
tu trouveras pas mal de patterns qui se ressemble dans leur implémentation sous forme de classes. Mais cela ne veut pas dire qu'un pattern = un autre pattern. Ce qui est important dans un pattern c'est avant tout le problème que ce pattern veut résoudre. Ensuite, la solution n'a, je dirai, que "peu d'importance" dans le sens où tu dois te focaliser sur le problème et non la solution.
Une classe peut "accueillir" plusieurs patterns bien sûr. Et c'est d'ailleurs ça qui est difficile. C'est aussi pour cela que dans le bouquin sur le Gof il y a pour chaque pattern les patterns qui "couchent" bien avec le dit pattern
-
1. State:
c'est une interface.
tous les états concrets sont connus (ce qui permet de construire la machine à états).
1. Observer
c'est une interface aussi, mais les observeurs concrets ne sont pas connus (ce qui permet de découpler du code).
1. exemple:
une TCPConnection pourrait notifier (un TCPConnectionObserver) lors de la réception du message ChangeState().
Une TCPConnection n'est pas dépendante de la classe qui l'utilise.
2. Abstract factory
permet de créer des objets - sans garder de lien dessus.
2. Façade
permet d'encapsuler des objets - donc d'avoir des liens (private) dessus.
2. exemple:
Dans une architecture en couche, chaque couche peut-être encapsulée à travers une façade. Pour construire chaque couche, on peut demander à une factory de construire une couche (et de la connecter à celle qui lui est inférieure).
-