Page 1 sur 1

[PHP5] Design Pattern - Multiton

Posté : 29 avr. 2006, 11:36
par Vaedan
Amis programmeurs, voici un Design Pattern made by me !
Je pense qu'une telle class (ou schéma) doit existait, mais dans le doute, je vous la mets !


Présentation:

Ce classe mais en oeuvre un design pattern basé sur le singleton. Il s'agit du multiton. Au lieu d'implanter un singleton dans chaque classe, cette classe gère toute les classes voulues comme des singletons ... Je pense que mon explication n'est pas des meilleures alors rien ne vaut un bon exemple !


Exemple:
class Tester
{
    public $str = 'bonjour';
}

$a = Multiton::get_instance( 'Tester' );
$a->str = 'hello';

$b = Multiton::get_instance( 'Tester' );

echo $b->str;
// hello

$b->str = 'salut';

echo $a->str;
// salut
Source:
class Multiton
{
    // Instances
    private static $_instances = array();

    // Caller
    public static function get_instance( $instance )
    {
        // Si l'objet n'est pas créé ...
        if ( ! isset( self::$_instances[ $instance ] ) )
        {
            // ... on le crée
            self::$_instances[ $instance ] = new $instance;
        }

        // Retourne l'instance
        return self::$_instances[ $instance ];
    }
}

Posté : 29 avr. 2006, 13:52
par jeff
hello

j'aurai choisir serviceLoader plutot que multiton(mais bon)

sinon j'aurai mis la class multiton en class abstraite avec une methode getInstances definie en final

un comme le bout de code qui se touve sur php.openstate(qui est hors ligne en ce mement)
	protected static function Singleton($instance_id = null){
		if(!isset(self::$_instance[$instance_id])){
			if(!class_exists($instance_id)){
				return false;
			}
			self::$_instance[$instance_id] = new $instance_id();
		}
		return self::$_instance[$instance_id];
	}