2017-09-12 3 views
0

Je suis à la recherche d'un modèle de conception qui permet le comportement dynamique d'une fonction basée sur les implémentations des sujets abstraits auxquels elle applique le comportement.Designer Motif hybride d'État et de commandement?

Un exemple abstrait:

interface IPlace 
    {  
    } 

    class Garage implements IPlace 
    { 
    } 

    class Backyard implements IPlace 
    { 
    } 

    class Mover 
    { 
     void Move(IPlace source, IPlace destination); 
    } 

Exemple d'utilisation:

void NotMain() 
    { 
     IPlace garage = new Garage(); 
     IPlace backyard = new Backyard(); 
     Mover mover = new Mover(); 
     mover.move(garage, garage); 
     mover.move(garage, backyard); 
     mover.move(backyard, garage); 
     mover.move(backyard, backyard); 
    } 

Résultat attendu:

Mover moved an item inside the garage 
Mover moved an item from the garage to the backyard 
Mover moved an item from the backyard to the garage because it's raining 
Mover moved an item around in the backyard 

Je pense que la réponse pourrait être le modèle de stratégie, mais je ne suis pas sûr de comment le comportement devrait être décidé car il y a n^2 comportements différents, où n est le nombre d'implémentations de l'interface IPlace. Peut-être une usine qui renvoie un objet MoveOperation?

Je suis intéressé par la meilleure solution pour ce type de problème.

Répondre

0

Cela ne semble pas être le cas d'un modèle de conception de stratégie. C'est un héritage simple. Le démarrage des noms d'interface avec 'I' (IPlace) ne sert à rien car il est également similaire à tout autre 'type' dans l'implémentation.

modèle de stratégie est appliquée lorsque

  1. nous avons une famille d'algorithmes
  2. nous tenons à ceux interchangeables et
  3. il n'y a pas de changement dans l'état.

Dans le problème ci-dessus tout ce qui précède est manquant. De plus, Place peut être une classe abstraite à la place de l'interface afin que vous puissiez pousser l'état commun lié à tous les endroits.