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

Design Patterns Discussion :

L'utiliser ou pas? [Singleton]


Sujet :

Design Patterns

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 156
    Points : 95
    Points
    95
    Par défaut L'utiliser ou pas?
    Salut.

    Je suis entrain de faire un petit wrapper d'OpenAL en c#, et je fait face à un problème existentiel.

    Devrais je utiliser le pattern Singleton ou pas?
    J'expose la situation et la fonction de mes classes:

    D'abord, j'ai une classe AudioSytem, qui est un singleton qui a en charge d'initialiser le device, de faire des captures audio, de vérifier quelles sont les extensions supportés par ma carte son, etc...
    Aucun problème de ce coté la.

    Ensuite j'ai une classe SourceManager qui est un singleton (et c'est là que ça m'embête ) qui me permet de créer des Sources sonores.
    Les sources sonores peuvent référer un pointeur vers un même Buffer contenant les donnés à jouées, useful pour ne pas surcharger la mémoire en utilisant le même pointeur pour un son unique.

    De plus, j'ai une classe Listener qui est un Singleton (la aussi ça me tracasse) qui représente le listener d'OpenAL (il est unique, dans l'api OpenAL).


    Enfin, j'ai une classe BufferManager qui est un singleton qui me permet de créer des Buffers de son, utilisé par les Sources.
    Aucun problème de ce coté ci.

    Voila comment ça s'utilise:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    public void Initialise()
    {
    AudioSytem.Instance.Initialize();// une surcharge permet de prendre en parametre le nom d'un device.
    
    Buffer buffer=BufferManager.Instance.Load("Roxanne.ogg");
    
    //le premier argument est le nom donné la source qui doit être crée
    Source source=SourceManager.Instance.CreateSource("toto",buffer);
    source.Play();
    source.Position=new Vector(0,0,10);
    
    Listener.Instance.Position=new Vector(0,10,50);
    }
    
    
    [...]
    
    private SourceManager _sourceMgr;
    private Listener _listener;
    
    public void Loop()
    {
    //dans la boucle principale
    
    AudioSytem.Instance.Update();
    }
    Note les Instances des classes Listener et SourceManager doivent être unique, mais ne serait il pas "mieux" de "demander" leur référence à travers l'instance AudioSystem plutôt qu'avec le singleton.

    Donc j'hésite avec ça:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    
    SourceManager _sourceMgr;
    Listener _listener.
    
    public void Initialize()
    {
    AudioSystem.Instance.Initialize();
    
    _sourceMgr=AudioSystem.Instance.SourceManager;//=getSourceManager() en cpp
    _listener=AudioSystem.Instance.Listener;//=getListener()
    
    //charge un bonne musique
    Buffer buffer=BufferManager.Instance.Load("Roxanne.ogg");
    
    Source source=_sourceMgr.CreateSource("toto",buffer); 
    source.Play();
    source.Position=new Vector(0,0,10);
    }
    
    //dans la boocle principale
    
    public void Loop()
    {
    AudioSytem.Instance.Update();
    }
    J'espère avoir été suffisamment clair, merci d'avance pour toutes les suggestions.

  2. #2
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    La meilleure façcon de résoudre ton prblème est de répondre à cette question :

    "Est-ce de la responsabilité de AudioSystem que de répondre de l'unicité et de l'accès aux SourceManager et Listener?"

    Si oui => 2/
    Si non => 1/
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 156
    Points : 95
    Points
    95
    Par défaut
    Hum, c'est en vérité la question que je me posais naturellement.

    Je pense que je vais m'orienter vers la solution deux.Ca évitera quelques bugs d'une mauvaise utilisation par une autre personne.

    @++

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

Discussions similaires

  1. Vector : l'utiliser ou pas ?
    Par Coutume dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 09/05/2010, 20h40
  2. C3P0 pool de connection il faut l'utiliser ou pas ?
    Par zolive dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/03/2010, 10h49
  3. Utiliser un pas dans une boucle For .. to .. do
    Par colorid dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2009, 11h09
  4. C# libre d'utilisation ou pas ?
    Par hotdogFRANCE dans le forum C#
    Réponses: 6
    Dernier message: 19/01/2009, 18h55
  5. [Débat] Utiliser ou pas les frames sur un site ?
    Par nico_web dans le forum Webdesign & Ergonomie
    Réponses: 15
    Dernier message: 12/10/2005, 20h54

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