Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    consultant/formateur Java SE
    Inscrit en
    juillet 2006
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Autre

    Informations professionnelles :
    Activité : consultant/formateur Java SE

    Informations forums :
    Inscription : juillet 2006
    Messages : 897
    Points : 1 135
    Points
    1 135

    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 ?
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!

  2. #2
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 058
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 058
    Points : 4 214
    Points
    4 214

    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.
    Java : Forum - FAQ - Java SE 8 API - Java EE 7 API
    Articles sur Ceylon : Présentation et installation - Concepts de base

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    consultant/formateur Java SE
    Inscrit en
    juillet 2006
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Autre

    Informations professionnelles :
    Activité : consultant/formateur Java SE

    Informations forums :
    Inscription : juillet 2006
    Messages : 897
    Points : 1 135
    Points
    1 135

    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.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!

  4. #4
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 058
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 058
    Points : 4 214
    Points
    4 214

    Par défaut

    Dans cas j'aurai plutôt vu un truc du genre (inspiré par les patterns Service de Java) :
    Code :
    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;
      }
    }
    Java : Forum - FAQ - Java SE 8 API - Java EE 7 API
    Articles sur Ceylon : Présentation et installation - Concepts de base

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    consultant/formateur Java SE
    Inscrit en
    juillet 2006
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Autre

    Informations professionnelles :
    Activité : consultant/formateur Java SE

    Informations forums :
    Inscription : juillet 2006
    Messages : 897
    Points : 1 135
    Points
    1 135

    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 :
    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.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!

  6. #6
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 058
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 058
    Points : 4 214
    Points
    4 214

    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 :
    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);
      }
    }
    Java : Forum - FAQ - Java SE 8 API - Java EE 7 API
    Articles sur Ceylon : Présentation et installation - Concepts de base

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •