Bonjour
J'ai deux choses à demander ^^
1ère chose :
J'ai étudié le pattern Strategie grâce au livre "Design Pattern - Tete la Première". Cependant, quelque chose me chiffonne quand je parcours le Web et quand j'ai découvert le pattern Bridge (pont) qui ressemble beaucoup au pattern stratégie :
Maintenant, dans le livre pour le pattern Stratégie, j'ai l'impression que c'est un mixte du pattern Pont et Strategie. Voilà le diagramme UML en pièce jointe.Le pont est un pattern Strcucturel:
- Pont: Sépare une abstraction de son implémentation de sorte que les deux puissent varier indépendamment.
Le stratégie est un pattern comportemental:
- Stratégie: Définit une famille d'algorithmes, encapsule chacun, et les rend interchangeables. La Stratégie permet à un algorithme de varier indépendamment des clients qui l'utilisent.
Voilà je voulais votre avis sur la question
2ème chose :
Je souhaiterais appliquer l'un des deux patterns (je pense le Strategie) à ma situation dans mon jeu 2D :
Soit les interfaces IEntity, ISprite ainsi que des interfaces *Behaviours
- La classe Player et Enemy dérivent de l'interface IEntity.
- La classe AnimatedSprite et ClassicalSprite dérivent de l'interface ISprite.
- IEntity est composé d'un ISprite (composition) et d'interfaces de Behaviours (non implémentées encore).
- La classe World (qui gère le monde en entier) possède un ensemble d'entités (dans un vector pour l'instant).
Donc grâce au polymorphisme je peux mettre à jour et dessiner toutes mes entites en parcourant le vector.
Pas de problème jusqu'à la
MAIS si je veux rajouter dans les classes Player et Enemy des attributs spécifiques voires des méthodes spécifiques, je ne pourrais jamais les invoquer à partir de World (car il ne manipule que des IEntity).
De même, les Behaviours vont devoir manipuler des attributs des classes Player, Enemy par exemple quand un ennemie va perdre de la vie, il faudra bien baisser son attribut heath (qui sera privé dans la classe Enemy).
Pour être plus clair, prenons un exemple de Behaviours : IColissionBehaviour (celui qui gère les collisions entre les entités). Imaginons une classe HitBehaviour qui implémente (dérive en C++) de IColissionBehaviour.
La classe HitBehaviour à besoin de connaitre des infos sur toutes les Entity qui implémentent ce comportement !
Et hop, je suis coincé !! Je ne vois pas comment faire...
J'ai vraiment besoin d'aide, je n'arrive plus à avancer dans mon design
Merci en tout cas, et bonne vacances![]()
Partager