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

Design Patterns Discussion :

Introduction simple et en douceur


Sujet :

Design Patterns

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 24
    Points
    24
    Par défaut Introduction simple et en douceur
    Bonjour,

    Voilà je voudrais juste donner un coup de pouce à ceux qui ne connaîtraient pas ou peu ce pattern, et ceci sans prétention, et qui cherchent à (mieux le) comprendre.
    (Nota: Je ne parlerai pas ici de la méthode annuler() que pourrait comporter l'interface ICommand, et pas non plus des macro-commandes ).


    Expliqué à ma façon, ça donne donc:


    La Commande peut-être vue comme un ORDRE ("fait telle chose...") destiné à un Objet appelé le récepteur.
    La Commande est en fait un objet qui encapsule complètement l'ORDRE, à savoir: recepteur.faitTelleChose();
    (dans mon exemple l'Ordre est au final: lePortail.open() ).

    Une commande est un objet qui possèdera une méthode executer(),
    et c'est l'invocation de cette dernière qui lancera l'ORDRE:
    this.recepteur.faitTelleChose(). (Avec this: l'objet Commande).


    Enfin, il y a l'invocateur: c'est tout bêtement celui qui effectuera l'appel commandeConcrete.executer(); voilà!
    L'invocateur est un objet qui encapsule un objet Commande.
    L'invocateur ne connaît absolument pas l'ORDRE(recepteur.faitTelleChose()) qu'il lance, et encore moins son Destinataire(récepteur)!
    C'est l'un des intérêts du pattern Commande.



    Petit bout de code JAVA en guise d'exemple minimaliste:
    -------------------------------------------------------



    interface ICommand { void executer(); }

    //L'objet Commande encapsule l'ORDRE.
    class commande_Ouvrir_Portail implements ICommand
    {
    private IPortail lePortail; //récepteur de l'Ordre

    commandOuvrir_Portail(IPortail lePortail) //Constructeur
    { this.lePortail=lePortail; } //Initialise le membre récepteur de l'Ordre.

    //--- Implémentation de ICommand:

    //Execution de la commande: l'appel à cette méthode-ci fera
    //que le récepteur (this.lePortail) se verra ordonner une certaine tâche:
    //ici open() .

    void executer() { this.lePortail.open(); } //Lance l'ORDRE encapsulé.
    }

    //--------------------
    //Le récepteur peut-être n'importe quel objet on s'en fiche.
    //Il faut juste qu'il implémente une interface pour l'objet Commande.

    interface IPortail { void open(); } //RECEPTEUR, DESTINATAIRE DE L'ORDRE

    //Récepteur concret
    class portail_de_droite implements IPortail
    {void open() {System.out.println("Je suis le portail de droite et je m'ouvre"); }

    //---------------------

    //L'INVOCATEUR: celui qui fait this.objetCommande.executer() .
    //L'invocateur est comme une télécommande programmable.

    class invocateur
    {
    private ICommand commande;

    invocateur( ICommand commande ) //Constructeur
    { this.commande=commande; }

    //L'appel de cette méthode va appeler la méthode executer() de l'objet
    //commande encapsulé: this.commande.

    void clicSurBoutonX()
    { this.commande.executer(); }
    }



    //----- LE CODE CLIENT: -----------------------------
    /*Ne sait pas quelle méthode du IPortail va être appelée
    lorsque la méthode executer() de la ICommand sera invoquée par l'invocateur.L'invocateur ne sait même pas le contenu de l'opération, l'ordre dont il //demande l'exécution par son telecommande.clicSurBoutonX().
    */


    IPortail monPortail =new portail_de_droite(); //Le futur récepteur
    ICommand monORDRE=new commande_Ouvrir_Portail( monPortail );

    //Association du lancement de l'ORDRE avec le BoutonX de la télécommande.
    Invocateur telecommande=new invocateur( monORDRE );

    //L'invocateur lance l'ORDRE que son objet commande encapsule.
    telecommande.clicSurBoutonX();


    //Résultat: affichera "Je suis le portail de droite et je m'ouvre" .

    //------------------
    Remarque: un invocateur peut très bien encapsuler plusieurs objets commandes.


    Voilà,
    j'espère que l'exemple que je donne sera clair et compréhensible par un max. de personnes.

    Modeste développeur: je suis là pour apprendre et si je peux aider ça me fait plaisir aussi.

    Favoriser l'extensibilité du code à sa "modifiabilité".
    --> VIVE LES INTERFACES.

    Je hais les copier-coller(sources d'erreurs , d'oublis, de doublonnage, de code mort,...) et suis pour la réUTILISABILITE.

  2. #2
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par rp37000 Voir le message
    Bonjour,

    Voilà je voudrais juste donner un coup de pouce à ceux qui ne connaîtraient pas ou peu ce pattern, et ceci sans prétention, et qui cherchent à (mieux le) comprendre.
    (Nota: Je ne parlerai pas ici de la méthode annuler() que pourrait comporter l'interface ICommand, et pas non plus des macro-commandes ).


    Expliqué à ma façon, ça donne donc:


    La Commande peut-être vue comme un ORDRE ("fait telle chose...") destiné à un Objet appelé le récepteur.
    La Commande est en fait un objet qui encapsule complètement l'ORDRE, à savoir: recepteur.faitTelleChose();
    (dans mon exemple l'Ordre est au final: lePortail.open() ).

    Une commande est un objet qui possèdera une méthode executer(),
    et c'est l'invocation de cette dernière qui lancera l'ORDRE:
    this.recepteur.faitTelleChose(). (Avec this: l'objet Commande).


    Enfin, il y a l'invocateur: c'est tout bêtement celui qui effectuera l'appel commandeConcrete.executer(); voilà!
    L'invocateur est un objet qui encapsule un objet Commande.
    L'invocateur ne connaît absolument pas l'ORDRE(recepteur.faitTelleChose()) qu'il lance, et encore moins son Destinataire(récepteur)!
    C'est l'un des intérêts du pattern Commande.



    Petit bout de code JAVA en guise d'exemple minimaliste:
    -------------------------------------------------------



    interface ICommand { void executer(); }

    //L'objet Commande encapsule l'ORDRE.
    class commande_Ouvrir_Portail implements ICommand
    {
    private IPortail lePortail; //récepteur de l'Ordre

    commandOuvrir_Portail(IPortail lePortail) //Constructeur
    { this.lePortail=lePortail; } //Initialise le membre récepteur de l'Ordre.

    //--- Implémentation de ICommand:

    //Execution de la commande: l'appel à cette méthode-ci fera
    //que le récepteur (this.lePortail) se verra ordonner une certaine tâche:
    //ici open() .

    void executer() { this.lePortail.open(); } //Lance l'ORDRE encapsulé.
    }

    //--------------------
    //Le récepteur peut-être n'importe quel objet on s'en fiche.
    //Il faut juste qu'il implémente une interface pour l'objet Commande.

    interface IPortail { void open(); } //RECEPTEUR, DESTINATAIRE DE L'ORDRE

    //Récepteur concret
    class portail_de_droite implements IPortail
    {void open() {System.out.println("Je suis le portail de droite et je m'ouvre"); }

    //---------------------

    //L'INVOCATEUR: celui qui fait this.objetCommande.executer() .
    //L'invocateur est comme une télécommande programmable.

    class invocateur
    {
    private ICommand commande;

    invocateur( ICommand commande ) //Constructeur
    { this.commande=commande; }

    //L'appel de cette méthode va appeler la méthode executer() de l'objet
    //commande encapsulé: this.commande.

    void clicSurBoutonX()
    { this.commande.executer(); }
    }



    //----- LE CODE CLIENT: -----------------------------
    /*Ne sait pas quelle méthode du IPortail va être appelée
    lorsque la méthode executer() de la ICommand sera invoquée par l'invocateur.L'invocateur ne sait même pas le contenu de l'opération, l'ordre dont il //demande l'exécution par son telecommande.clicSurBoutonX().
    */


    IPortail monPortail =new portail_de_droite(); //Le futur récepteur
    ICommand monORDRE=new commande_Ouvrir_Portail( monPortail );

    //Association du lancement de l'ORDRE avec le BoutonX de la télécommande.
    Invocateur telecommande=new invocateur( monORDRE );

    //L'invocateur lance l'ORDRE que son objet commande encapsule.
    telecommande.clicSurBoutonX();


    //Résultat: affichera "Je suis le portail de droite et je m'ouvre" .

    //------------------
    Remarque: un invocateur peut très bien encapsuler plusieurs objets commandes.


    Voilà,
    j'espère que l'exemple que je donne sera clair et compréhensible par un max. de personnes.

    ça ressemble bcoup au pattern publisher

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    NON je ne crois pas du tout!
    Je ne connaissais pas l'appellation "Pattern publisher" mais apparemment ce dernier est l'autre nom du "Pattern Observateur"...
    Donc rien à voir je trouve.
    http://www.vico.org/pages/PatronsDis...ber/index.html

    Merci
    Modeste développeur: je suis là pour apprendre et si je peux aider ça me fait plaisir aussi.

    Favoriser l'extensibilité du code à sa "modifiabilité".
    --> VIVE LES INTERFACES.

    Je hais les copier-coller(sources d'erreurs , d'oublis, de doublonnage, de code mort,...) et suis pour la réUTILISABILITE.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Merci pour cette explication qui m'a bien éclairci le pattern Command.
    Bonne continuation

Discussions similaires

  1. [simple] Récupérer sélection d'un TComboBox
    Par Claythest dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/06/2003, 17h30
  2. Effet de transition simple entre 2 images
    Par ChrisFAPS dans le forum Flash
    Réponses: 2
    Dernier message: 18/04/2003, 12h41
  3. Bon je vais essayer d'être simple :
    Par fpouget dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/04/2003, 17h46
  4. Edition d'un simple fichier java
    Par mcrepin dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 21/03/2003, 14h28
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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