Design patterns - createurs

Soyez le premier à donner votre avis sur cette source.

Vue 5 734 fois - Téléchargée 390 fois

Description

Parmi la liste des design pattern créateurs on trouve :

La Factory Method
Le Builder
Le Prototype
Le Singleton

A titre didactique, voici une façon de les implémenter en PhP.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Morphinof
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3 -
Question de point vue, la tienne fait : return $retourClasse->newInstanceArgs($arguments); ce que je voulai absolument eviter parce que ca t'oblige a implementer tes classe sous un format unique alors qu'avec la mienne c'est generique
bj33
Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
1 mai 2012
-
salut

Je n'ai visionné que la factory et franchement je ne suis pas du tout convaincu et ne changerais pas celle que j'utilise. ex :

final class Fabrique {
private static $_instance = null;
private $_namespace;

protected function __construct() {}

/**
* retourne une instance de la classe en tenant compte du namespace
* si présent.
*
* @param $namespace
* @return object
*/
public static function getInstance($namespace = null) {
if (is_null(self::$_instance)) {
self::$_instance = new self;
}
self::$_instance->_namespace = $namespace;
return self::$_instance;
}

public function __call($methodes,$arguments) {
$classe = ucfirst(strtolower($this->_namespace.$methodes));
if (class_exists($classe,false)) {
$retourClasse = new ReflectionClass($classe);
if ($retourClasse->isInstantiable() && $retourClasse->hasMethod('__construct')) {
return $retourClasse->newInstanceArgs($arguments);
} else {
throw new Format_Generique('La classe '.$classe.' n\'est pas instanciable');
}
} else {
throw new Format_Generique('La classe '.$classe.' est introuvable');
}
}
}

si çà peut t'inspirer davantage;)
Morphinof
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3 -
Merci pour vos commentaires ;)

Pour la facory method j'avoue que c'est plutot lourd mais en fait j'ai eu quelque problemes avec call_user_function et j'ai trouve ca plus generique car par exemple on peu vouloir une classe avec un constructeur vide et un initialisateur et je sais plus exactement pourquoi mais ca m'a pose probleme a l'epoque j'aurais du noter exactement le soucis que j'avais eu, a la base je voulai eviter l'eval.
Pour l'exception et l'utilisation de $class et $function c'est que je trouve ca moins lourd a lire que getTrace() on sait direction de quelle classe et a quel appel l'exception a ete levee mais la c'est juste un choix esthetique en fait getTrace est plus verbose c'est sur ^^
DiGhan
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1 -
Un peu complexe.

L'algo d'instanciation de la Factory est trop lourd : utilisation de eval(), func_get_args(). Dans ce cas, l'utilisation de la réflexion est tout à fait adaptée.

Pourquoi utiliser $class et $function dans l'exception alors que l'erreur est identifiable par l'exception qui l'a créé ? Si tu veux pousser la localisation de l'erreur tu peux t'aider d'Exception::getTrace().

Il n'y a pas d'erreurs mais des problèmes de conception et "d'optimisation".
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13 -
Salut,

Désolé, je n'ai jeté un oeil que rapidement, mais... bon ben je pense qu'on peut te faire confiance sur la qualité de la source.
En plus, de ce que j'ai vu, ça m'a l'air très propre. Et je doute qu'il y ait des erreurs grossières :)
Ca fait du bien de voir des sources pure POO, ça change ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.