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

PHP & Base de données Discussion :

Masques : Singleton dans Factory ?


Sujet :

PHP & Base de données

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Masques : Singleton dans Factory ?
    Bonjour !

    Dans le cadre de la création d'un CMS, j'ai créé une classe d'abstraction de base de données assortie des masques factory et singleton dont il y a un descriptif ici.

    L'idée se décompose ainsi (en partant des exemples PHP) :

    Classe d'abstraction : abstract Database

    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
    29
    <?php
    abstract class Database 
    { 
        private static $instance = NULL; 
         
        public static function factory($class) 
        { 
           if (class_exists($class))  
           { 
              if(isset(self::$instance) && self::$instance instanceof $class) { 
                  return self::$instance; 
              } 
              self::$instance = new $class; 
              return self::$instance; 
                         
           } else { 
               throw new Exception('Classe introuvable.'); 
           }         
        } 
    
       public function __clone() 
       { 
           trigger_error('Le clônage n\'est pas autorisé.', E_USER_ERROR); 
       } 
    }
    ?>                  
     
    

    Exemple de classe membre : MySQL

    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
    
    <?php
    class MySQL extends Database
    { 
    private static $instance = NULL; 
    private $connection = FALSE; 
    
    protected function __construct() 
        { 
            $this->connect(); 
        } 
    
    
       // Méthode Singleton interne.        
      public static function getInstance() 
      { 
            if (!isset(self::$instance)) { 
                $class = __CLASS__; 
                self::$instance = new $class; 
            } 
             
            return self::$instance; 
      }
    
      // ... 
    ?>
    Utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <?php
    $var = Database::factory('MySQL');
    ?> 
    
    ou (dans un autre script...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
    $var = MySQL::getInstance();
    ?> 
    Description :
    1. Vérifie si la classe demandée existe (MySQL).
    2. Vérifie si une instance existe déjà et si c'est une instance de la classe demandée.
    3. Si oui, l'instance existante est retournée.
    4. Sinon, une nouvelle instance et créée puis retournée.
    L'idée, c'est que les sous-classes (MySQL en l'occurence) pourraient être appellées par la classe d'abstraction (factory) ou alors par leur singleton interne.

    Ce qui fait que les sous-classes pourrait être instanciées indépendement, avec leur propre singleton.

    Note : J'ai légérement modifié le masque singleton, le constructeur est protected pour que la classe parente puisse fabriquer l'objet demandé.
    Dernière modification par Invité ; 11/07/2006 à 17h19.

Discussions similaires

  1. Singleton dans dll ?
    Par KiwiJaune dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 18/02/2010, 15h25
  2. Les singletons dans une appli web?
    Par jowsuket dans le forum C#
    Réponses: 9
    Dernier message: 18/06/2009, 14h26
  3. Singleton dans une DLL
    Par mister3957 dans le forum C++
    Réponses: 9
    Dernier message: 24/03/2009, 10h01
  4. Réponses: 12
    Dernier message: 13/11/2007, 09h52
  5. [Tableaux] singleton et factory
    Par jeff_! dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2006, 14h24

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