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

Codes sources à télécharger Java Discussion :

Singleton avec délégation


Sujet :

Codes sources à télécharger Java

  1. #1
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut Singleton avec délégation
    Bonjour,

    Je vous propose un nouvel élément à utiliser : singleton avec délégation

    le code "client" d'un singleton ne devrait pas savoir qu'il a affaire à un singleton.

    de plus ce code peut évoluer et le singleton disparaitre ....

    Qu'en pensez-vous ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    Est-ce que tu pourrais donner un peu plus d'explication pourquoi utiliser un singleton derrière ?

    Autrement, je suis pas trop d'accord sur le fait "de ne pas se soucier". S'il y a des ressources partagées autant le savoir et utiliser 'l'instance correctement.

  3. #3
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Est-ce que tu pourrais donner un peu plus d'explication pourquoi utiliser un singleton derrière ?

    Autrement, je suis pas trop d'accord sur le fait "de ne pas se soucier". S'il y a des ressources partagées autant le savoir et utiliser 'l'instance correctement.
    Ici principe d'encapsulation: le code client demande un service et n'a pas à savoir comment il est implanté. Si au cours de l'évolution des codes le responsable de ce code se rend compte qu'il n'a plus affaire à un Singleton les codes clients ne sont pas impactés.
    On aura alors un peu l'équivalent d'une Fabrique: en fonction de circonstances qui échappent au code client on aura un code différent qui rend le service.

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    Dans cas j'aurai plutôt vu un truc du genre (inspiré par les patterns Service de Java) :
    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
     
    public interface QuelqueChose {
      void faisLe(String argument);
    }
     
    public class QuelqueChoseImpl {
      void faisLe(String argument) {
         System.out.println(this + " fais quelque chose");
      }
    }
     
    public class QuelqueChoseBuilder {
      private static final QuelqueChose qqch = new QuelqueChoseImpl();
     
      public static QuelqueChose newInstance() {
        return qqch;
      }
    }

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    non ... encore une fois le newinstance implique que le code client sache qu'on aie un singleton ... ce que l'on cache.
    le code client demande un service et il le fait comme d'habitude: crée un objet et on lui rend des services .... derrière il n'y a qu'un seul objet actif mais il n'est pas censé le savoir.
    C'est vrai que le plus souvent cette forme du pattern est hybride: on crée un constructeur avec paramètres qui constituent des variables d'instance. le singleton derrière exécute une méthode avec des paramètres.
    genre:
    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
     
    class Machin {
       static final Chose chose = new Chose() ; // classe statique interne si besoin
       String etat1;
       int etat2 ;
     
       public Machin(String st1, int it2)  {
            this.etat1= st1 ;
            this.etat2 = it2 ;
       }
     
       public int execute(int arg3) {
            return chose.exec(etat1, etat2, arg3) ;
       }
     
    }
    On a ici un singleton qui exécute dans un contexte particulier au client.

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    Je comprends mieux dans ce cas Il faudrait peut-être màj l'exemple.

    Ex : Un bus de communication (commun à plusieurs clients) mais chaque client envoie son propre id (initialisé au début) et le message (spécifique à chaque envoie).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Messenger {
      private static final Channel channel = new Channel();
      private static int nextId = 1;
     
      private int id = nextId++;
     
      public void send(String msg) {
        channel.send(id, msg);
      }
    }

Discussions similaires

  1. Implémentation d'un singleton avec des std::shared_ptr
    Par whityranger dans le forum SL & STL
    Réponses: 17
    Dernier message: 10/01/2014, 12h04
  2. POO design pattern Singleton avec Windev
    Par Atsibat dans le forum Contribuez
    Réponses: 2
    Dernier message: 30/11/2012, 14h57
  3. Singleton avec ThreadLocal
    Par christopheJ dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 10/03/2011, 14h43
  4. Singleton avec initialiseur static
    Par christopheJ dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 10/03/2011, 14h37
  5. [Framework] Singletons avec Spring
    Par Hyperion99 dans le forum Spring
    Réponses: 4
    Dernier message: 27/09/2009, 16h54

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