溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP設計模式(1)工廠模式

發(fā)布時間:2020-04-09 00:08:01 來源:網絡 閱讀:546 作者:shayang88 欄目:web開發(fā)

工廠模式 是一種類,它具有為您創(chuàng)建對象的某些方法。您可以使用工廠類創(chuàng)建對象,而不直接使用 new。這樣,如果您想要更改是所創(chuàng)建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。

比方說我們在網站上給用戶制定一些任務讓用戶完成,不同的任務我們會創(chuàng)建不同的類,當用戶完成某個任務的時候,會給用戶一些對應的獎勵,這個時候如果我們任務的類型比較多,那么我們可以采用工廠模式:

<?php
//說明這里要引入對應的文件
class Task_Factory{
    //任務列表的類數(shù)組
    private $_arrClass = array();
    //定義一個私有的靜態(tài)變量,給生成實例的靜態(tài)方法使用
    private static $_obj = null;
    //初始化任務類數(shù)組,前面是key,對應真正的類名
    private function __construct(){
        //發(fā)新浪微博任務
        $this->addClass('sina_wb', 'Sinawb');
        //發(fā)騰訊微博任務
        $this->addClass('qq_wb',   'Qqwb');
        //互動任務
        $this->addClass('interact','Interact');
        //連續(xù)簽到任務
        $this->addClass('sign',    'Sign');
    }
    //創(chuàng)建類的動作,定義為靜態(tài)
    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;
        }
    }
                            
    //往數(shù)組里添加任務類,初始化時用
    private function addClass($name, $RealName){
        $this->_arrClass[$name] = $RealName;
    }
                            
}

這樣,當我們要使用一個類時,可以如下調用:

//參數(shù)為對應的類的key
$objTask = Task_Factory::factory('interact');


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI