Шаблоны Singleton и Registry были очень просты и понятны для меня сразу, но шаблон Factory был тем, что я до сих пор не мог заставить свой мозг интерпретировать на 100%.Я думаю, что могу понять это сейчас, я написал пример кода ниже, пожалуйста, просмотрите и скажите мне, правильно ли это использовать шаблон Factory.Пример в PHP ...
<?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();
?>
Итак, в основном объекты Database, Cache и Session создаются (здесь не показаны), а затем добавляются в объект Factory, я могу создать метод вФабричный класс для каждого объекта, которому потребуется любая из этих 3-х зависимостей, и я могу указать, какие из них они тоже получают.Это также делает его тем, что отдельные классы могут все еще быть несколько переносимыми, так как я могу напрямую вводить туда зависимости, если бы я хотел без фабричного объекта.Это звучит правильно?Если это правильно, это звучит действительно полезно
ОБНОВЛЕНИЕ # 1
Это основано на этом здесь сообщении в блоге, которое я прочитал здесь http://www.potstuck.com/2009/01/08/php-dependency-injection/ они называют это "фабрикой", я использую Реестр, и многие люди говорят мне, чтобы я посмотрел на "фабрику", и все, что я прочитал об этом, просто не щелкнуло в моей голове, пока я не прочитал этот artcleно похоже, что это не "фабрика"?
ОБНОВЛЕНИЕ # 2
С wikipedia http://en.wikipedia.org/wiki/Factory_object В объектно-ориентированном компьютерном программировании фабрикаОбъект - это объект для создания других объектов.Это абстракция конструктора, и его можно использовать для реализации различных схем размещения, таких как шаблон синглтона.У фабричного объекта обычно есть метод для каждого вида объекта, который он способен создать.Эти методы необязательно принимают параметры, определяющие способ создания объекта, а затем возвращают созданный объект.Фабричные объекты используются в ситуациях, когда получение объекта определенного вида является более сложным процессом, чем просто создание нового объекта.Заводской объект может решить создать класс объекта (если применимо) динамически, вернуть его из пула объектов, выполнить сложную настройку объекта или выполнить другие действия.
Так что, может быть, это «Заводской объект» в некотором роде ...