首頁  >  文章  >  後端開發  >  php設計模式二之工廠模式、單例模式、註冊樹模式

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

不言
不言原創
2018-04-13 16:27:491305瀏覽

這篇文章介紹的內容是php設計模式二之工廠模式、單例模式、註冊樹模式 ,現在分享給大家,有需要的朋友可以參考一下

#一、工廠模式:工廠方法或類別中產生對象,而不是在程式碼中直接new
優點:將某個常用類,多個地方需要new 時,使用工廠模式,方便類別的擴充與維護
檔案目錄:Frame/Factory.php

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

class Factory
{
    static function createDatabase()
    {
        //$db = new Database(); //正常实例化类
        $db = Database::getInstance();    //获取单例模式的类
        Register::set(&#39;db&#39;,$db);          //将实例化后的类注册到全局注册树中
        return $db;
    }
}
//外部调用得到$db对象
$db = Frame\Factory::createDatabase();
//获取全局注册树中的对象
$db = Frame\Register::get(&#39;db&#39;);
//卸载全局注册树中的对象
$db = Frame\Register::_unset(&#39;db&#39;);
?>

二、單例模式:只允許在類別的本身new 實例化物件
優點:外部無法new 該類,且這個物件在類別本身建立一次,節約資源開銷
檔案目錄:Frame/Database.php

<?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();
?>

三、註冊樹模式:將某個物件註冊到全域註冊樹中,以便於全域使用
存放目錄:Frame/Register.php

<?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];
    }
    
}
?>

相關推薦:

php設計模式一之命名空間、自動載入類別、PSR-0編碼規格                                             

以上是php設計模式二之工廠模式、單例模式、註冊樹模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn