工廠模式
工廠模式可以將對象的生產直接從new一個對象,改成調用一個工廠方法.這樣的好處是:如果實例化的類名發生了變化,只需要修改工廠方法即可
代碼實現簡單工廠模式
目錄結構
|factor #項目根目錄
|--Think #核心類庫
|----Loder.php #自動加載類
|----factor.php #工廠類
|----main #核心類
|------DB.php #DB類
|--index.php #單一的入口文件
代碼實例
DB類 Think/main/DB.php
<?php
/**
* DB類
*/
namespace Think\main;
class DB{
public function __construct() {
echo __CLASS__.PHP_EOL;
}
}
工廠類 Think/factor.php
<?php
/**
* 工廠類
*/
namespace Think;
use Think\main\DB;
class factor{
//生成對象方法
static function createDB(){
echo '實例化了DB類'.PHP_EOL;
return new DB();
}
}
自動加載類 Think/Loder.php
<?php
namespace Think;
class Loder{
static function autoload($class){
require BASEDIR . '/' .str_replace('\\','/',$class) . '.php';
}
}
入口文件 index.php
<?php
define('BASEDIR',__DIR__);
include BASEDIR . '/Think/Loder.php';
spl_autoload_register('\\Think\\Loder::autoload');
\Think\factor::createDB();
優點: 1、一個調用者想創建一個對象,只要知道其名稱就可以了。 2、擴展性高,如果想增加一個產品,只要擴展一個工廠類就可以。 3、屏蔽產品的具體實現,調用者只關心產品的接口。
缺點:每次增加一個產品時,都需要增加一個具體類和對象實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的復雜度,同時也增加了系統具體類的依賴。
注意事項:作為一種創建類模式,在任何需要生成復雜對象的地方,都可以使用工廠方法模式。有一點需要注意的地方就是復雜對象適合使用工廠模式,而簡單對象,特別是只需要通過 new 就可以完成創建的對象,無需使用工廠模式。如果使用工廠模式,就需要引入一個工廠類,會增加系統的復雜度。
下一篇 php設計模式之單例模式