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();
?>
したがって、基本的に、データベース、キャッシュ、およびセッション オブジェクトが作成され (ここには示されていません)、それらが Factory オブジェクトに追加されます。これら 3 つの依存関係のいずれかを必要とする各オブジェクトのファクトリ クラスでメソッドを構築できます。彼らも得るものを設定します。これにより、ファクトリ オブジェクトを使用せずに必要に応じて依存関係を直接注入できるため、個々のクラスをある程度移植可能にすることもできます。これは正しいと思いますか?これが正しいとすれば、これは非常に便利です
更新 # 1
これは、私がここで読んだブログ投稿http://www.potstuck.com/2009/01/08/php-dependency-injection/に基づいています。多くの人が「工場」を調べるように言い続けていますが、それについて読んだことはすべて、この記事を読むまで頭に浮かびませんでしたが、「工場」ではないように見えますか?
UPDATE # 2
ウィキペディア
からhttp://en.wikipedia.org/wiki/Factory_object
オブジェクト指向コンピューター プログラミングでは、ファクトリ オブジェクトは、他のオブジェクトを作成するためのオブジェクトです。これはコンストラクターの抽象化であり、シングルトン パターンなどのさまざまな割り当てスキームを実装するために使用できます。通常、ファクトリ オブジェクトには、作成できるすべての種類のオブジェクトのメソッドがあります。これらのメソッドは、オプションで、オブジェクトの作成方法を定義するパラメーターを受け取り、作成されたオブジェクトを返します。ファクトリ オブジェクトは、特定の種類のオブジェクトを取得することが、単に新しいオブジェクトを作成するよりも複雑なプロセスである場合に使用されます。ファクトリ オブジェクトは、オブジェクトのクラス (該当する場合) を動的に作成する、オブジェクト プールからクラスを返す、オブジェクトに対して複雑な構成を行う、またはその他のことを決定する場合があります。
結局のところ、これはある意味で「ファクトリーオブジェクト」なのかもしれません...