顧名思義,工廠是可以加工零件的,PHP程式中的原廠模式也有相同的功能,可以方便的使用一個靜態Factory 方法來執行個體化某一個類,那麼這樣做的好處是什麼呢?初學PHP的設計模式,以下是我個人的理解
一般我們執行個體化一個類會給它一些參數以便在其構析的時候可以根據不同的參數反饋出我們需要的結果。
舉例說明,以下是一個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;
}
}
?>
我們如果要執行個體化這個類就要這樣:
1.$u = new User(‘小明‘,19);
一般如果這個類很少使用,那麼這樣做沒什麼太大影響,也非常好。
突然我想給這個類增加一個歸類,把小明放入學生組,修改下類代碼實現非常容易,但如果這個類在我們想修改之前在很多檔案地方多次的執行個體化了,那麼想為其增加一個參數就會變的非常煩瑣,因為需要替換成:
1.$u = new User(‘小明‘,19,‘學生‘);
當然我們也可以通過在__construct函數中進行預設值設定來避免這種重複勞動,但事實上從代碼優雅角度來說這樣很不好,設想我們有一個Factory 方法可以通過一個標識來對應一組參數,並把這個參數存放在某個文字文件或是直接以數組的形式存放在工廠類中,我們在調用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();
http://www.bkjia.com/PHPjc/735168.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/735168.htmlTechArticle顧名思義,工廠是可以加工零件的,PHP程式中的原廠模式也有相同的功能,可以方便的使用一個靜態Factory 方法來執行個體化某一個類,那麼這...