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

Java Discussion :

Découverte du pattern decorator et petits soucis


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 37
    Points : 34
    Points
    34
    Par défaut Découverte du pattern decorator et petits soucis
    Bonjour tout le monde,

    Après avoir étudier des exemples du pattern "decorator" sur des pizzas et des cafés, j'ai voulut m'excercer à ce pattern.

    Petite mise en situation de mon exemple :
    On s'intéresse à un voxel d'une image médicale. Ce voxel peut avoir plusieurs types différents en fonction de si c'est une image d'IRM, ou d'un scanner, ou d'une TEP par exemple. Et ce même voxel peut avoir une à plusieurs valeurs possibles.

    Du coup je me suis dit : bah voila un bel exemple pour faire du decorator. Voila ce que j'ai déjà fait :

    Le voxel :

    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
    public abstract class Voxel {
     
    	protected int x;
    	protected int y;
    	protected int z;
    	protected String description = "voxel";
     
    	public Voxel(int x, int y, int z) {
    	}
     
    	public Voxel() {
    	}
     
     
    	public int getX() {
    		return x;
    	}
     
    	public void setX(int x) {
    		this.x = x;
    	}
     
    	public int getY() {
    		return y;
    	}
     
    	public void setY(int y) {
    		this.y = y;
    	}
     
    	public int getZ() {
    		return z;
    	}
     
    	public void setZ(int z) {
    		this.z = z;
    	}
     
    	public String getDescription() {
    		return description;
    	}
    }
    Un premier Decorator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public abstract class ModalityDecorator extends Voxel {
    	public abstract String getDescription();
    }
    Un type de voxel issue de ce decorator :

    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
    public class MRI_Voxel extends ModalityDecorator{
     
    	protected int x;
    	protected int y;
    	protected int z;
    	protected String description;
     
    	public MRI_Voxel(int x, int y, int z) {
    		this.x = x;
    		this.y = y;
    		this.z = z;
    	}
     
    	public MRI_Voxel() {
    		this.x = 0;
    		this.y = 0;
    		this.z = 0;
    	}
     
     
        public String getDescription() {
            return this.description + ", MRI";
        }
    }
    Un autre type :
    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
    public class PET_Voxel extends ModalityDecorator{
     
    	protected int x;
    	protected int y;
    	protected int z;
    	protected String description;
     
    	/**
             * 
             * @param x
             * @param y
             * @param z
             */
    	public PET_Voxel(int x, int y, int z) {
    		this.x = x;
    		this.y = y;
    		this.z = z;
    	}
     
    	/**
             * 
             */
    	public PET_Voxel() {
    		this.x = 0;
    		this.y = 0;
    		this.z = 0;
    	}
     
     
        public String getDescription() {
            return this.description + ", PET";
        }
    }
    Le deuxieme Decorator pour la ou les valeurs du voxel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public abstract class Voxel_Decorator extends Voxel {
    	protected Voxel voxel;
     
    	public Voxel_Decorator(Voxel voxel)
    	{
    		this.voxel = voxel;
    	}
     
    	public abstract String getDescription();
    }
    Et la decoration qui correspond au fait qu'un voxel possède une seule valeur :

    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
    public class ScalarVoxel extends Voxel_Decorator{
     
    	/**
             * 
             */
    	float value;
     
    	/**
             * 
             * @param p
             */
    	public ScalarVoxel(Voxel p)
    	{
    		super(p);
    	}
     
    	public String getDescription()
    	{
    		return voxel.getDescription() + ",Scalare";
    	}
     
    	public float getValue() {
    		return value;
    	}
     
    	public void setValue(float val) {
    		this.value = val;
    	}
    }
    Ca à l'air de marcher, mais je voudrai aller encore plus loin et c'est là que je ne sais pas si mon idée est possible ou tout bonnement infaisable et hérétique.

    En fait on voit qu'on a ici deux types de voxel, et chaque voxel aura des operations indépendante : on peut mesurer l'activité d'un voxel TEP mais ça n'a pas de sens pour un voxel MRI. Donc j'avais imaginé qu'en mettant dans la décoration du voxel TEP, une fonction setActivity, avoir accès à cette fonction simplement en faisant monObjetDecoré.setActivity(); et le hic ça ne va pas ce qui semble assez logique mais j'imaginais que ça serait possible avec la décoration.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PET_Voxel voxPET = new PET_Voxel();
    		ScalarVoxel voxScalPET = new ScalarVoxel(voxPET);
    Je peux avoir accès a la fonction setActivty avec voxPET.setActivity(), bon logique, mais j'aimerai en fait y avoir accès depuis voxScalPET pour tout regrouper.

    Je ne sais pas si c'est possible avec le pattern decorator de le faire, peut être dois je monter ma décoration autrement.

    Auriez vous une idée?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 182
    Points : 268
    Points
    268
    Par défaut
    en faites avec le decorator pattern tu ne peut pas avoir de code qui agis directement sur l'objet decoré, quand un objet est decoré par la suite tu ne manipule que sa nouvelle enveloppe.

    Il semble que le decorator pattern ne puissent s'appliquer a ce tu cherche a faire, je pense que l'heritage et le strategy pattern pourrait possiblement etre une meilleur idee.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    Je pensais qu'avec ce pattern, j'obtiendrai un super objet.

    le strategy pattern pourrait possiblement etre une meilleur idee.
    Je vais de ce pas m'intéresser à ce pattern.

Discussions similaires

  1. [Décorateur] Souci Pattern Decorator
    Par olivier1978 dans le forum Design Patterns
    Réponses: 5
    Dernier message: 19/10/2007, 15h26
  2. Souci Pattern Decorator
    Par olivier1978 dans le forum C++
    Réponses: 1
    Dernier message: 19/10/2007, 11h55
  3. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58
  4. Réponses: 6
    Dernier message: 21/01/2004, 13h25
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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