PHP工場モデルのメリットを解析する
2338 ワード
その名の通り、工場は部品を加工することができ、PHPプログラムの工場モードも同じ機能を持っており、静的な工場方法を使ってクラスをインスタンス化するのに便利ですが、このようなメリットは何でしょうか.PHPのデザインを初めて学んで、以下は私の個人的な理解です
一般的に、クラスをインスタンス化すると、いくつかのパラメータが与えられ、その構築時に異なるパラメータに基づいて必要な結果をフィードバックすることができます.
たとえば、以下はUserクラスで、非常に簡単です.
このクラスをインスタンス化するには、次のようにします.
$u=new User(‘明ちゃん’,19);一般的にこのクラスが少ないと、あまり影響がなく、とてもいいです.
突然、私はこのクラスに分類を追加したいと思っています.明ちゃんを学生グループに入れて、クラスコードを修正するのは簡単ですが、もしこのクラスが私たちが修正したい前に多くのファイルの場所で何度もインスタンス化されたら、パラメータを追加したいと思っています.
$u=new User(‘明ちゃん’,19,‘学生’);もちろん私たちもconstruct関数ではデフォルト値の設定を行い、このような重複作業を回避しますが、実際にはコードの優雅さの観点からはよくありません.パラメータのセットを識別することで対応し、ある文書ドキュメントに格納したり、直接配列の形でファクトリクラスに格納したりするファクトリメソッドがあることを想定しています.Userクラスを呼び出すと楽になります.パラメータ属性を増減してもコードの置き換えをあちこち行う必要はありません.次はファクトリクラスです(Userクラスに直接メソッドを保存することもできます).
得られた結果は「明ちゃん」を出力するはずだ.
一般的に、クラスをインスタンス化すると、いくつかのパラメータが与えられ、その構築時に異なるパラメータに基づいて必要な結果をフィードバックすることができます.
たとえば、以下はUserクラスで、非常に簡単です.
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(‘明ちゃん’,19);一般的にこのクラスが少ないと、あまり影響がなく、とてもいいです.
突然、私はこのクラスに分類を追加したいと思っています.明ちゃんを学生グループに入れて、クラスコードを修正するのは簡単ですが、もしこのクラスが私たちが修正したい前に多くのファイルの場所で何度もインスタンス化されたら、パラメータを追加したいと思っています.
$u=new User(‘明ちゃん’,19,‘学生’);もちろん私たちもconstruct関数ではデフォルト値の設定を行い、このような重複作業を回避しますが、実際にはコードの優雅さの観点からはよくありません.パラメータのセットを識別することで対応し、ある文書ドキュメントに格納したり、直接配列の形でファクトリクラスに格納したりするファクトリメソッドがあることを想定しています.Userクラスを呼び出すと楽になります.パラメータ属性を増減してもコードの置き換えをあちこち行う必要はありません.次はファクトリクラスです(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();
得られた結果は「明ちゃん」を出力するはずだ.