Précédent   Forum du club des développeurs et IT Pro > Java > Communauté Java > Téléchargez
Téléchargez Récupérez et commentez les sources et outils mis à disposition par la rubrique Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/05/2012, 16h43   #1
professeur shadoko
Membre Expert
 
Avatar de professeur shadoko
 
Homme
consultant/formateur Java SE
Inscription : juillet 2006
Messages : 772
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 64
Localisation : Autre

Informations professionnelles :
Activité : consultant/formateur Java SE

Informations forums :
Inscription : juillet 2006
Messages : 772
Points : 1 066
Points : 1 066
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!
professeur shadoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2012, 13h57   #2
Nemek
Modérateur
 
Avatar de Nemek
 
Homme Logan
Développeur Java
Inscription : août 2005
Messages : 1 695
Détails du profil
Informations personnelles :
Nom : Homme Logan
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2005
Messages : 1 695
Points : 3 661
Points : 3 661
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 7 API - Java EE 6 API

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
Nemek est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 12h07   #3
professeur shadoko
Membre Expert
 
Avatar de professeur shadoko
 
Homme
consultant/formateur Java SE
Inscription : juillet 2006
Messages : 772
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 64
Localisation : Autre

Informations professionnelles :
Activité : consultant/formateur Java SE

Informations forums :
Inscription : juillet 2006
Messages : 772
Points : 1 066
Points : 1 066
Citation:
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!
professeur shadoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 13h23   #4
Nemek
Modérateur
 
Avatar de Nemek
 
Homme Logan
Développeur Java
Inscription : août 2005
Messages : 1 695
Détails du profil
Informations personnelles :
Nom : Homme Logan
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2005
Messages : 1 695
Points : 3 661
Points : 3 661
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 7 API - Java EE 6 API

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
Nemek est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 14h19   #5
professeur shadoko
Membre Expert
 
Avatar de professeur shadoko
 
Homme
consultant/formateur Java SE
Inscription : juillet 2006
Messages : 772
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 64
Localisation : Autre

Informations professionnelles :
Activité : consultant/formateur Java SE

Informations forums :
Inscription : juillet 2006
Messages : 772
Points : 1 066
Points : 1 066
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!
professeur shadoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 14h59   #6
Nemek
Modérateur
 
Avatar de Nemek
 
Homme Logan
Développeur Java
Inscription : août 2005
Messages : 1 695
Détails du profil
Informations personnelles :
Nom : Homme Logan
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2005
Messages : 1 695
Points : 3 661
Points : 3 661
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 7 API - Java EE 6 API

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
Nemek est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h06.


 
 
 
 
Partenaires

Hébergement Web