その名前が示すように、ファクトリはパーツを処理できます。PHP プログラムの ファクトリ パターン にも同じ機能があります。これを行うと、どのような利点があるでしょうか。以下は、PHP デザイン パターンの初心者です。一般に、クラスをインスタンス化するときは、クラスを構築するときに、さまざまなパラメーターに基づいて必要な結果をフィードバックできるように、いくつかのパラメーターを与えます。
たとえば、次は非常に単純な User クラスです:
<?php interface IUser{ function getName(); function getAge(); } class User implements IUser{ protected $_name; protected $_age; function __construct($name, $age){ $this->_name = $name; $this->_age = (int)$age; } function getName(){ return $this->_name; } function getAge(){ return $this->_age; } } ?>
$u = new User('Xiao Ming',19) ;
通常、このクラスの場合はめったに使用されないため、大きな影響はなく、まったく問題ありません。 突然、このクラスに分類を追加して、Xiao Ming を学生グループに追加したいと思います。クラス コードを変更するのは非常に簡単ですが、このクラスを変更する前に多くのファイルで何度もインスタンス化される場合は、パラメーターを追加することは、次のように置き換える必要があるため、非常に面倒になります:
$u = new User('Xiaoming',19,'student');
もちろん、デフォルト値を__construct 関数設定は、この種の作業の重複を避けるために行われますが、実際、これはコードの優雅さの観点からは良くありません。識別子を通じてパラメーターのセットに対応できるファクトリ メソッドがあり、このパラメーターを に保存するとします。テキストドキュメントまたは配列の形式でファクトリクラスに直接格納すると、パラメータの属性を増減する必要がある場合でも、コードを置き換える必要がなくなります。以下はファクトリ クラスです (メソッドを User クラスに直接保存することもできます)
interface IUser{ function getName(); function getAge(); } class User implements IUser{ protected $_group; protected $_name; protected $_age; function __construct($name, $age, $group){ $this->_group = $group; $this->_name = $name; $this->_age = (int)$age; } function getName(){ return $this->_name; } function getAge(){ return $this->_age; } } class Fuser{ private static $group = array( array(‘小明‘,19,‘学生‘), array(‘小王‘,19,‘学生‘) ); static function create($id){ list($name, $age, $group) = self::$group[(int)$id]; return new User($name, $age, $group); } } echo Fuser::create(0)->getName();