その名前が示すように、ファクトリはパーツを処理できます。PHP プログラムのファクトリ モードにも同じ機能があります。これを行うと、どのような利点があるでしょうか。私は PHP デザインパターンを初めて使用します。以下は私の個人的な理解です
一般に、クラスをインスタンス化するときは、クラスの構築時にさまざまなパラメーターに基づいて必要な結果をフィードバックできるように、いくつかのパラメーターをそれに与えます。
たとえば、次は非常に単純な User クラスです:
インターフェイス IUser{
関数 getName();
関数 getAge();
}
クラス ユーザー実装 IUser{
保護された $_name;
保護された $_age;
関数 __construct($name, $age){
$this->_name = $name;
$this->_age = (int)$age;
}
関数 getName(){
$this->_name;
を返します
}
関数 getAge(){
$this->_age;
を返す
}
}
?>
このクラスをインスタンス化したい場合は、次のようにします:
1.$u = 新しいユーザー(‘小明‘,19);
一般に、このクラスがほとんど使用されない場合、使用しても大きな影響はなく、非常に良いことです。
突然、このクラスに分類を追加して、Xiao Ming を学生グループに追加したいと思います。ただし、このクラスが変更する前に多くのファイルで何度もインスタンス化されている場合、次のクラスのコードを変更するのは非常に簡単です。それを学生グループに追加すると、次のように置き換える必要があるため、パラメータの追加が非常に面倒になります。
1.$u = 新しいユーザー('シャオミン',19,'学生');
もちろん、__construct 関数にデフォルト値を設定することでこの作業の重複を避けることもできますが、実際には、これはコードの優雅さの観点からは良くありません。識別子を介してパラメータを取得し、このパラメータをテキスト ドキュメントに格納するか、配列の形式でファクトリ クラスに直接格納すると、パラメータの属性を増減する必要がある場合でも、これがはるかに簡単になります。コードを置き換えるには、次のようにする必要はありません (メソッドは User クラスに直接格納することもできます)。
インターフェイス IUser{
関数 getName();
関数 getAge();
}
クラス ユーザー実装 IUser{
保護された $_group;
保護された $_name;
保護された $_age;
function __construct($name, $age, $group){
$this->_group = $group;
$this->_name = $name;
$this->_age = (int)$age;
}
関数 getName(){
$this->_name;を返します
}
関数 getAge(){
$this->_age;
を返す
}
}
クラスフューザー{
プライベート静的 $group = array(
array('シャオミン',19,'学生'),
array('小王',19,'学生')
);
静的関数 create($id){
list($name, $age, $group) = self::$group[(int)$id];
新しいユーザー($name, $age, $group)を返します;
}
}
echo Fuser::create(0)->getName();
http://www.bkjia.com/PHPjc/735168.html