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

Langage Java Discussion :

[Conception] Classe abstraite ou singleton


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 142
    Par défaut [Conception] Classe abstraite ou singleton
    Bonjour,

    J'ai une question qui est peut être bête mais elle m'est venue à l'esprit.

    On créé un singleton lorsqu'on ne souhaite qu'une instance unique de cette classe.

    Une alternative ne serait-elle pas de remplacer le singleton par une classe abstraite contenant que des champs de type "static" et qui seraient initialisés par une méthode elle-même "static" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    abstract class MaClasse {
      private static String monChamp1;
      private static String monChamp2;
     
      public static void load initialize(String champ1, String champ2) {
        monChamp1 = champ1;
        monChamp2 = champ2;
      }
     
    }

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Avec un singleton tu crées une instance (dont les attributs sont accessibles par des getters et/ou setters) unique d'une classe, alors que ta classe abstraite "bidouillée" représente plutôt un ensemble d'attributs : au final on ne peux pas manipuler la structure que réprésente ta classe abstraite dans son ensemble (comme objet) mais on est restreint de le faire attribut par attribut.
    [REMARQUE : les Design Patterns (dont Singleton) ont été pensés pour que tu ne te reposes pas les questions et surtout que tu ne tombes pas dans certains pièges de conception!]

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 142
    Par défaut
    Je m'étais posé cette question car le Singleton en MultiThreading pose des problèmes et je réflechissais à une façon d'éviter l'usage du Singleton.

  4. #4
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Je m'étais posé cette question car le Singleton en MultiThreading pose des problèmes et je réflechissais à une façon d'éviter l'usage du Singleton.
    Il existe un nombre impressionnant d'articles à ce sujet.
    est ton ami.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par speedster
    Je m'étais posé cette question car le Singleton en MultiThreading pose des problèmes et je réflechissais à une façon d'éviter l'usage du Singleton.
    Et en quoi l'utilisation de méthode static résolu le problème ???

    Dans ton cas si deux threads appellent la méthode initialize() tu auras le même problème...


    De plus ce problème est limité à quelques cas particulier, et il y a plusieurs solutions simples :
    • Si le singleton n'a pas besoin de création spécifique,on peut le créer au chargement de la classe (c'est le classloader qui créera l'instance quel que soit le thread) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      public final class Singleton {
      	private final static Singleton INSTANCE = new Singleton();
       
      	private Singleton() {
      	}
       
      	public static Singleton getInstance() {
      		return INSTANCE;
      	}
      }
    • Sinon le plus simple reste encore d'utiliser getInstance() au démarrage de l'application avant de créer les autres threads. Dans ce cas là il n'y a plus de problème par la suite (concernant la création de l'instance bien sûr).



    Bref quel type d'application utilises-tu pour risquer des problèmes lors de la création de ton singleton ?


    a++

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 142
    Par défaut
    Il s'agit d'une appli Web et je souhaitais configurer un objet contenant les informations de la base de données.

    Mais ma question est plus d'ordre "métaphysique".

    Par contre, je ne vois pas pourquoi le problème du multithreading se pose avec ma classe "batarde" puisqu'il n'y a pas de vérification sur la variable instance.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par speedster
    Par contre, je ne vois pas pourquoi le problème du multithreading se pose avec ma classe "batarde" puisqu'il n'y a pas de vérification sur la variable instance.
    Ben le problème est toujours le même : si tu est en multithread tu n'est pas sûr que initialize() soit appelé avant toutes les autres méthodes...

    A moins bien sûr d'utiliser une des solutions cités dans mon précédent message. Mais dans ce cas là pourquoi se privée du Singleton qui adopte une approche plus orienté objet...

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Conception] Héritage sur Plusieurs classes abstraites
    Par facilus68 dans le forum Langage
    Réponses: 9
    Dernier message: 20/03/2009, 13h06
  2. Conception: héritage d'une classe abstraite
    Par Kikito dans le forum Langage
    Réponses: 19
    Dernier message: 05/10/2006, 17h36
  3. [Debutant][Conception] Classes abstraites et interface.
    Par SirDarken dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 00h02
  4. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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