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 :

Du mal a cerner la conception en cas d'ajout de plusieurs décorateurs


Sujet :

Design Patterns

  1. #1
    zo1odMSQr5Fy
    Invité(e)
    Par défaut Du mal a cerner la conception en cas d'ajout de plusieurs décorateurs
    Bonjour,

    Un de mes projets perso consiste à developper un jeu ( Je suis en charge de la conception du serveur ). Il est developpé en java. Il y a bien une connexion entre le serveur et le client. Mais maintenant je dois allez plus profondément en programmant les objets du jeu.


    Alors j'ai lu les tutoriel de smeric et de pcaboche. Mais j'ai du mal à cerner comment appliquer le Design Pattern Decorateur en java pour mon cas. En effet prenons le cas d'une arme. Je souhaiterais qu'elle puisse avoir plusieurs décorateur. Par exemple nous avons un objet Epée Longue . le joueur l'aiguise donc on lui applique le décorateur Aiguisée. Puis un enchantement fait qu'on lui ajoute le décorateur Enflammé. Donc l'Epée Longue devient une Epée Longue aiguisée enflammée. Mais je ne sais pas si ce DP prend en charge ce genre de cas car on doit tenir compte des deux bonus des décorateurs ajoutés. Au départ je pensais juste faire une ArrayList dans ma classe Epée Longue et puis basta.

    Est-ce possible avec Decorateur ?

    Merci !
    Cordialement,
    TheBear

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Une épée ayant un nombre fini d'états (qui ne donnent pas lieu à la création d'une classe),
    utiliser enum est plus approprié, cf. :
    http://marxsoftware.blogspot.com/201...d-enumset.html

    En plus on peut ajouter un nouvel état facilement.
    On peut alors utiliser la Pattern Observer/Observable pour gérer le traitements des différents états.

    Sinon les choix se gèrent avec l'algèbre de Boole.

  3. #3
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Le pattern Decorator permet tout à fait de gérer ce genre de choses.

    Cf http://en.wikipedia.org/wiki/Decorator_pattern le deuxième exemple (décorateurs de café qui ajoutent des ingrédients et permettent de calculer le prix final du café).

    La clé ici est que le décorateur dérive lui-même de la classe de base à décorer (pour toi, Epée) et peut donc être décoré comme un objet de base par un autre décorateur, qui lui-même... et ainsi de suite.

    Maintenant si tu veux gérer une gamme extensible de N enchantements, il va falloir un peu génériciser tout ça. Ca peut vite être fastidieux de devoir écrire une classe différente et donc recompiler ton application à chaque fois que tu ajoutes un nouvel enchantement, surtout s'ils sont tous dans la même veine et permettent juste de rajouter un bonus à l'épée...

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/05/2015, 16h21
  2. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  3. Réponses: 6
    Dernier message: 16/02/2007, 00h47
  4. Réponses: 2
    Dernier message: 07/08/2006, 20h27
  5. Réponses: 17
    Dernier message: 03/06/2006, 03h29

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