您好,登錄后才能下訂單哦!
工廠模式 是一種類,它具有為您創建對象的某些方法。您可以使用工廠類創建對象,而不直接使用 new
。這樣,如果您想要更改是所創建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。
比方說我們在網站上給用戶制定一些任務讓用戶完成,不同的任務我們會創建不同的類,當用戶完成某個任務的時候,會給用戶一些對應的獎勵,這個時候如果我們任務的類型比較多,那么我們可以采用工廠模式:
<?php //說明這里要引入對應的文件 class Task_Factory{ //任務列表的類數組 private $_arrClass = array(); //定義一個私有的靜態變量,給生成實例的靜態方法使用 private static $_obj = null; //初始化任務類數組,前面是key,對應真正的類名 private function __construct(){ //發新浪微博任務 $this->addClass('sina_wb', 'Sinawb'); //發騰訊微博任務 $this->addClass('qq_wb', 'Qqwb'); //互動任務 $this->addClass('interact','Interact'); //連續簽到任務 $this->addClass('sign', 'Sign'); } //創建類的動作,定義為靜態 public static function factory($tClass){ if (self::$_obj == null){ self::$_obj = new self(); } if(!isset(self::$_obj->_arrClass[$tClass])){ //如果類不存在,返回false return false; }else{ //類存在則生成實例 $strClassName = self::$_obj->_arrClass[$tClass]; } $ret = new $strClassName(); //這里Task_Base_Abstract是一個任務類的抽象類,定義了一些任務共有方法 //比方說任務完成進度,做任務等方法 if($ret instanceof Task_Base_Abstract){ //確認實例對象生成,則返回實例 return $ret; }else{ //失敗則返回false return false; } } //往數組里添加任務類,初始化時用 private function addClass($name, $RealName){ $this->_arrClass[$name] = $RealName; } }
這樣,當我們要使用一個類時,可以如下調用:
//參數為對應的類的key $objTask = Task_Factory::factory('interact');
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。