2010-12-06 10 views
1

J'ai implémenté un modèle de stratégie pour un analyseur de fichier d'historique de main de poker (code PHP ou Java). J'ai un problème pour créer une manière propre de POO pour les classes et les objets utilisés par les différentes stratégies.Comment utiliser des classes externes dans un modèle de stratégie?

Dans la vraie vie:

J'ai un jeu de classe qui a la main (s)

class Hand 
{ 
    ... // attributes for all strategies 
    ... // (in fact : attributes that define the "core" of a Hand) 
} 
class Game 
{ 
    Hand hands[]; 
} 

Une stratégie va créer un jeu d'objets et les mains

class StrategyA implements IStrategy // strategy pattern  
{ 
    Game game; 
    function Parse() 
    { 
     game = new Game(); 
     ... 
    } 
} 

Et cette stratégie aura besoin d'attributs spécifiques pour le jeu et chaque main Je ne peux pas mettre ces attributs dans la main ou dans le jeu là seulement utilisé par une stratégie et pas les autres. Ma question est la suivante: quelle est la meilleure façon d'utiliser la POO? Créer des classes spécifiques pour la stratégie? Il semble que la réponse est évidente, mais je me demande toujours s'il existe de meilleurs moyens. De plus, j'ai un problème de sémantique: quel genre de nom dois-je donner à mes cours (HandFor ... se sent mal!). Je suis un programmeur old-school, très procédural, et je perds tellement de temps à penser à la POO "propre"!

Répondre

1

Vous avez répondu à la question vous-même "Et cette stratégie aura besoin d'attributs spécifiques pour le jeu et les mains". Vous écrivez une stratégie et les attributs vont faire partie de cette stratégie.

+0

Important: attributs spécifiques pour CHAQUE main. Donc, je dois créer une classe qui hérite de la classe Hand, juste pour ma stratégie? Y a-t-il un autre moyen? – Antoine

+0

Lorsque vous créez une stratégie, vous transmettez normalement une référence à l'objet sur lequel la stratégie va agir. Ainsi, dans votre cas, Hand est passé en référence à la stratégie ... par exemple. le constructeur ressemblerait à quelque chose comme ceci "public MyStrategy (Hand context)". nommer est compatible avec http://en.wikipedia.org/wiki/Strategy_pattern –

+0

Cela signifie que je dois retirer les mains de la main du jeu. Je suis d'accord, mais est-ce que c'est "propre"? Un jeu a des mains, donc les mains devraient être l'attribut du jeu, devrait-il? – Antoine

Questions connexes