[PHP5] Design Pattern - Multiton

Eléphant du PHP | 493 Messages

29 avr. 2006, 11:36

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 ];
    }
}

Mammouth du PHP | 1311 Messages

29 avr. 2006, 13:52

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];
	}