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 :

Design pattern singleton : quelle utilité ?


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    etudiant info
    Inscrit en
    Mars 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : etudiant info

    Informations forums :
    Inscription : Mars 2016
    Messages : 32
    Points : 30
    Points
    30
    Par défaut Design pattern singleton : quelle utilité ?
    Bonjour, dans le cadre de mes études, nous sommes souvent amenés à rencontrer le design pattern singleton, je ne comprends toutefois pas l'intérêt : on pourrait très bien utiliser des attributs et des fonctions statiques non ? Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    c'est envisageable mais peu flexible.

    Déjà si ton singleton implémente une interface ou étend une classe abstraite qui définit ses méthodes, non tu ne peux pas remplacer par des appels statiques. Ou alors ça t'obligerait à plein de code de glue supplémentaire, et pour quoi ? Ben pour rien.

    De manière générale c'est un peu le principe de la programmation orientée objet : manipuler des objets qui ont chacun une mission précise, en lieu et place d'appeler des méthodes statiques ici ou là qui ne sont pas spécialement sous la coupe d'un objet. Pourquoi vouloir faire de la programmation par objet ? Parce que ça marche dans son rôle de garder les choses flexibles, alors que le reste ça marche pas trop. Et puis c'est pas comme si ça coûtait quelque chose de le faire.

    Par exemple ton singleton, là maintenant il est implémenté d'une manière précise, par une classe, qui rend le service que tu as besoin que le singleton rende. Bon et supposons qu'un jour tu aies besoin que ton programme puisse fonctionner en deux ou trois "modes" différents, configurables au lancement du programme, qui chacun demandent une implémentation différente du singleton, genre il y en a un qui se base sur les float, l'autre les double et l'autre les BigDecimal ? Eh bien avec un singleton dont l'implémentation est choisie au démarrage, c'est tout simple. En faisant autrement... Pas trop.

    C'est aussi un raisonnement qui facilite le contrôle qualité sur le domaine des tests unitaires : garder la flexibilité permet de tester chaque partie indépendante. Et le singleton peut être remplacé par une implémentation fantoche pour les besoins des tests, qui t'aidera à tester le composant qui s'en sert comme ça t'arrange.

    Bref utiliser de la programmation orientée objet, ça te garde toutes les portes de flexibilité ouvertes pour le futur, et ça ne coûte rien. Même quand on ne suspecte pas à l'avance comment ça va servir plus tard, en général ça ne change rien au fait que ça sert bel et bien plus tard. Garder des portes ouvertes est une stratégie efficace dans tous les domaines de la vie. (Cela dit dans la vraie vie en général on doit faire face à des choix qui obligent à fermer des portes. Ici, non... Alors abusons-en joyeusement.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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 : 75
    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
    la réalisation d'un singleton est souvent un piège.
    Toi, programmeur "réalisant" du code tu sais qu'il n'y a qu'une seule instance qui réalise un service ...
    mais les autres programmeurs "clients" doivent-ils le savoir?
    Ma réponse est (généralement) NON!
    combien de fois tu t'aperçois que , finalement, il peut y avoir plusieurs objets qui rendent service ? vas-tu courir après les autres pour qu'ils changent leur code?
    Dans de nombreux cas la bonne réalisation est un objet "normal" (avec constructeur et tout le toutim) qui délègue ses méthodes à un singleton connu de toi seul ... comme ça le jour où tu changes d'avis les codes "clients" n'en ont pas conscience.
    je vote pour l'encapsulation des singletons.

    edit: Oups je vois que je me répète: https://java.developpez.com/telechar...vec-delegation
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

Discussions similaires

  1. design pattern Singleton
    Par secksy dans le forum Débuter
    Réponses: 4
    Dernier message: 24/11/2009, 10h18
  2. scope application et design pattern singleton
    Par totoche dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 01/10/2008, 15h56
  3. [Singleton] Classe static ou Design Pattern Singleton ?
    Par piloupy dans le forum Design Patterns
    Réponses: 15
    Dernier message: 01/08/2008, 16h04
  4. Réponses: 1
    Dernier message: 04/07/2008, 14h53
  5. Implémentation du design pattern singleton
    Par 0pierrot0 dans le forum C++
    Réponses: 1
    Dernier message: 22/01/2008, 10h01

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