php設計模式:工廠模式、單例模式、註冊樹模式

1、工廠模式:工廠方法或類中生成對象,而不是在代碼中直接 new
優勢:將某個經常使用類,多個地方須要 new 時,使用工廠模式,方便類的擴展與維護
文件目錄:Frame/Factory.phpphp

<?php
namespace Frame;
use Frame\Database;
use Frame\Register;

class Factory
{
    static function createDatabase()
    {
        //$db = new Database(); //正常實例化類
        $db = Database::getInstance();    //獲取單例模式的類
        Register::set('db',$db);          //將實例化後的類註冊到全局註冊樹中
        return $db;
    }
}
//外部調用獲得$db對象
$db = Frame\Factory::createDatabase();
//獲取全局註冊樹中的對象
$db = Frame\Register::get('db');
//卸載全局註冊樹中的對象
$db = Frame\Register::_unset('db');
?>

2、單例模式:只容許在類的自己 new 實例化對象
優勢:外部沒法 new 該類,而且該對象在類自己建立一次,節約資源開銷
文件目錄:Frame/Database.phpspa

<?php
namespace Frame;

class Database
{
    protected $db;
    
    //單例模式,私有化__construct()方法,不容許外部實例化對象
    private function __construct()
    {
    }
    //實例化本類
    static function getInstance()
    {
        if(self::$db) {
            return self::$db;
        } else {
            self::$db = new self();
            return self::$db;
        }
    }
}
//外部調用
$db = Frame\Database::getInstance();
?>

3、註冊樹模式:將某個對象註冊到全局註冊樹中,便於全局使用
存放目錄:Frame/Register.phpcode

<?php
namespace Frame;

class Register
{
    protected $objects;
    /*
    *    將實例化後的類註冊到全局註冊樹中
    *    $alias :對象別名
    *    $object:實例化後的對象
    */
    static function set($alias,$object)
    {
        self::$objects[$alias] = $object;
    }
    /*
    *    卸載實例化後的類
    *    $alias :對象別名
    */
    static function _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
    /*
    *    獲取實例化後的類對象
    *    $alias : 對象別名
    */
    static function get($alias)
    {
        return self::$objects[$alias];
    }
    
}
?>
相關文章
相關標籤/搜索