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 :

[Java] Design Pattern Decorateur [Décorateur]


Sujet :

Design Patterns

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Java] Design Pattern Decorateur
    Bonjour à tous, j'ai un exercie de TD qui tourne autour du Pattern Decorateur et il y a certaines chose que je ne comprend pas très bien.

    En utilisant le modèle de conception Décorateur, nous voulons représenter des soldats qui disposent d’une collection d’armes. Il y a deux catégories de soldats : les fantassins et les cavaliers. Les armements sont représentés par des boucliers et des épées. Un soldat peut asséner un coup qui dépend de son armement et de sa catégorie (Fantassin, Cavalier). Il peut également parer un coup, sa protection dépendant de son armement et de sa catégorie. Il peut donc exister des soldats cavaliers avec des boucliers, des fantassins avec épée + boucliers, etc.….

    Sachant que les épées participent à la méthode assener et à la méthode parer, implémentez une solution simple permettant de suivre l’enchaînement des méthodes parer et asséner.

    Je ne comprends pas ce qu'on veut dire par " une solution simple permettant de suivre l'enchaînement des méthodes parer et asséner ".

    Donner ci-dessous le code que j'ai fais en espérant qu'il soit juste.

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    
    public class SoldatDecore implements Soldat{
    	private Soldat s_deco;
    	public SoldatDecore(Soldat s)
    	{
    		s_deco = s;
    	}
    	public void parer(int i)
    	{
    		s_deco.parer(i);
    	}
    	public int assener()
    	{
    		return s_deco.assener();
    	}
    }
    public interface Soldat {
    	public void parer(int coup);
    	public int assener();
    }
    public class Cavalier implements Soldat{
    	public int vie;
    	public int coup;
    	public Cavalier()
    	{
    		vie = 80;
    		coup = 5;
    	}
    	public void parer(int coup)
    	{
    		 vie = 0;
    	}
    	public int assener()
    	{
    		return coup;
    	}
    }
    public class Fantassin {
    	public int vie;
    	public int coup;
    	public Fantassin()
    	{
    		vie = 100;
    		coup = 10;
    	}
    	public void parer(int coup_recu)
    	{
    		 vie = 0;
    	}
    	public int assener()
    	{
    		return coup;
    	}
    }
    public class SoldatAvecBouclier {
    
    }
    public class SoldatAvecEpee extends SoldatDecore{
    	
    }

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Je ne comprends pas ce qu'on veut dire par " une solution simple permettant de suivre l'enchaînement des méthodes parer et asséner ".
    Met un "System.out.println("Assener/parer")" dans les méthodes correspondantes.
    C'est un peu vague là.

  3. #3
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public interface ISoldat{
       public void assener();
       public void parer();
    }
    public abstract class Soldat implements ISoldat{
    }
    public class Fantassin extends Soldat{
       public void assener(){
          System.out.println("Coup de fusil");
       }
       public void parer(){
          System.out.println("Je me cache dans la tranchee");
       }
    }
    public class Cavalier extends Soldat{
       public void assener(){
          System.out.println("Coup de sabot du canasson");
       }
       public void parer(){
          System.out.println("Le canasson se cambre");
       }
    }

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse je pensais qu'il fallait créer des méthodes qui permettaient par exemple d'afficher la vie d'un des Soldat
    ( affichervie() par ex dans la classe SoldatAvecBouclier ).

    Sinon j'ai deux petites questions concernant le Décorateur

    1) Une nouvelle contrainte apparaît dans les spécifications, un soldat ne peut avoir deux occurrences du même armement. Pensez-vous que le décorateur a pour rôle d’assurer cette contrainte ?

    Ma réponse : non, le décorateur ne permet pas d'assurer la contrainte. En effet, rien ne nous empêche de décorer le même objet plusieurs fois avec le même armement.
    La contrainte sera implémentée en plus dans le décorateur.

    2) Dans l’intention du modèle de conception décorateur, il est précisé que c’est pour enrichir le comportement d’un objet. Est-ce la réalité ?

    Ma Réponse : non. Même si le but du décorateur est « l'enrichissement d'un objet », les différents appels new prouvent bien qu'on crée plusieurs objets différents (avec des références différentes).
    Par exemple, si on crée un cavalier c et qu'on le décore avec une épée, on aura alors deux objets différents : cavalier et cavalier avec épée.

    Est ce que vous êtes du même avis ? merci d'avance

  5. #5
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Salut et bienvenu

    tu devrais avoir plus de réponse sur le forum conception

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

Discussions similaires

  1. Tutoriel design pattern decorateur
    Par Trunks dans le forum C++
    Réponses: 18
    Dernier message: 03/02/2009, 11h59
  2. Réponses: 8
    Dernier message: 30/09/2006, 05h18
  3. [Fabrique] [Java] Design Pattern Factory
    Par SkyBioSS dans le forum Design Patterns
    Réponses: 3
    Dernier message: 24/05/2006, 14h53

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