Les patterns Singleton et Registry étaient très simples et faciles à comprendre tout de suite, mais le pattern Factory a été quelque chose que je n'ai pas encore réussi à faire interpréter à 100%. Je pense que je pourrais le comprendre maintenant, j'ai écrit un exemple de code ci-dessous, s'il vous plaît examiner et dites-moi si c'est l'utilisation appropriée du modèle d'usine. L'échantillon est en PHP ...Est-ce ainsi que fonctionne le motif d'usine?
<?php
/**
* Factory.class.php
*/
class Factory {
public static $_database;
public static $_cache;
public static $_session;
// Build our User object with all it's dependencies
public static function makeUserObject()
{
$user = new User();
$user->setDatabaseObject(self::$_database);
$user->setCacheObject(self::$_cache);
$user->setSessionObject(self::$_session);
return $user;
}
// other objects will be here someday......
}
/**
* User.class.php
*/
class User
{
public function __construct() { }
// inject Database Object
public function setDatabaseObject($databaseConnectionObject)
{
$this->_databaseObject = $databaseConnectionObject;
}
// inject Cache Object
public function setCacheObject($cacheObject)
{
$this->_cacheObject = $cacheObject;
}
// inject Session Object
public function setSessionObject($sessionObject)
{
$this->_sessionObject = $sessionObject;
}
// other methods here for User object...........
}
/**
* index.php Main page that puts it all together
* assume that classes are autoloaded into this page already
*/
// Set our Database + Cache + Session objects into the Factory Object
Factory::$_database = new Databse();
Factory::$_cache = new Cache();
Factory::$_session = new Session();
// Create our User object
// The factory class will build the User object and inject all
// it's dependencies for us =)
$user = Factory::makeUserObject();
?>
Alors basiquement la base de données, le cache et les objets de session sont créés (non représenté ici), puis ils sont ajoutés à l'objet usine, je le peut construire une méthode dans la classe d'usine pour chaque objet qui aura besoin de l'une de ces 3 dépendances et je peux définir lesquelles ils obtiennent aussi. Cela permet également de rendre les classes individuelles un peu plus portables, car je peux y injecter directement des dépendances si je le voulais sans l'objet d'usine. Est-ce que ça sonne bien? Si cela est vrai, cela semble vraiment utile
MISE À JOUR # 1
C'est basé sur ce ici un billet de blog que je lis ici http://www.potstuck.com/2009/01/08/php-dependency-injection/ ils parlent comme une « usine », j'été en utilisant un registre et beaucoup de gens me disent de regarder dans une "usine" et tout ce que j'ai lu à ce sujet n'a pas cliqué dans ma tête jusqu'à ce que je lise cet artcle mais ressemble à ce n'est pas une "usine"?
MISE À JOUR # 2
De wikipedia http://en.wikipedia.org/wiki/Factory_object En programmation orientée objet, un objet usine est un objet pour créer d'autres objets. C'est une abstraction d'un constructeur, et peut être utilisé pour implémenter divers schémas d'allocation, tels que le modèle singleton. Un objet fabrique a généralement une méthode pour chaque type d'objet qu'il est capable de créer. Ces méthodes acceptent éventuellement des paramètres définissant comment l'objet est créé, puis retournent l'objet créé. Les objets d'usine sont utilisés dans des situations où l'obtention d'un objet d'un type particulier est un processus plus complexe que la simple création d'un nouvel objet. L'objet factory peut décider de créer dynamiquement la classe de l'objet (le cas échéant), le renvoyer depuis un pool d'objets, effectuer une configuration complexe sur l'objet ou d'autres choses.
Alors peut-être cela est un « objet usine » d'une manière ... Après tout
Pouvez-vous fournir une source qui décrit modèle cette 'usine'? Je connais des modèles appelés «Abstract Factory» et «Factory Method», mais pas seulement «Factory». –
@Gordon wow c'est beaucoup de modèles! Donc, je suppose que ce n'est pas vraiment une usine, et je pensais que je devais enfin quelque chose de bon ici – JasonDavis
@Gordon: Oui, ce sont les modèles créatifs du livre GoF :) Pas de modèle 'Factory' là-bas ... –