IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Pattern Command] Lien à mettre à jour


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [Pattern Command] Lien à mettre à jour
    Bonjour à tous !

    J'utilise le DP Command pour éxécuter des actions à appliquer à une image. Par exemple CommandRotate, CommandTranslate, etc...
    En stockant une MacroCommand (à base de std::list<Command*> par exemple ), j'obtiens donc une liste d'instructions à appliquer à mon image.

    Problème : lorsqu'on utilise le pattern Command, on lie une commande à un objet par référence. Je voudrais pouvoir changer cette référence, notamment pour l'utilisation d'un film, et non plus d'une seule image.

    Changer l'interface Commande serait-il une bonne solution ? :koin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct Command {
    virtual void Execute() = 0;
    virtual void Cancel() {}
    virtual void Update(vigra::UInt16Image &) {}
    };
    Qu'en pensez vous ? Choquant pour une interface Command ?


  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par poukill Voir le message
    Choquant pour une interface Command ?
    Oui il y a un ; en trop !!

    Plus sérieusement tu fais ce que tu veux avec tes commandes, y'a peu de chances que la police des design patterns t'attrape !

    Encore plus sérieusement peux-tu donner un exemple d'implémentation ? Notamment de Update() puisque j'imagine que c'est là que se résoud cette histoire de référence ?

    MAT.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    En fait, j'aimerais changer le récepteur de la commande (ici m_Image). Car s'il s'agit d'un film et non plus d'une image, alors j'aurai besoin de mettre à jour mon image à l'image courante du film...

    Voici une classe concrète en exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class CommandRotate : public Command {
    public :  
        virtual void Update(vigra::UInt16Image & image) { m_Image = image;} // Mise à jour de l'image
        virtual void Execute() { Rotate(m_Image); }
     
    private :
        vigra::UInt16Image & m_Image;
    };
    Je fais ça au feeling, ça m'a l'air pas mal.
    Après il existe peut être une astuce que je ne connais pas, ou que sais-je ...

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Ok, le Update prend l'image en argument, j'avais un peu peur d'un truc "subtil" dans les implémentations pour aller chercher les informations à mettre à jour.
    Donc ça combine un observateur et une commande, oui, pourquoi pas.

    En tous cas j'aurais tendance à dire que ça parait suffisamment simple pour se lancer là-dedans et voir plus tard si des problèmes surviennent.

    MAT.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Oui c'est ça Observateur + Command en fait !
    Ok super il n'y a plus qu'à retrousser les manches alors...

    pour ton aide !

  6. #6
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Au fait, le pattern Command, c'est un nom sophistiqué pour désigner une fonction.

    Tu pouvais tout simplement utiliser également boost::function .
    Le problème de l'update se résoud avec boost::bind.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Mettre à jour SF2 sans ligne de commande
    Par Alex94 dans le forum Symfony
    Réponses: 6
    Dernier message: 15/11/2011, 14h09
  2. [XL-2003] mettre à jour des lien hypertext
    Par ninikosim dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/04/2011, 11h16
  3. [CS4] Mettre à jour les liens après avoir renommé un fichier
    Par Totila dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 06/02/2009, 15h09
  4. [MySQL] Mettre à jour BDD à partir d'un lien généré
    Par fabiofabio dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/01/2008, 06h46
  5. Mettre à jour les liens des graphiques d'Excel dans Powerpoint
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2007, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo