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

來源:互聯網
上載者:User
本篇文章介紹的內容是php設計模式二之原廠模式、單例模式、註冊樹模式 ,現在分享給大家,有需要的朋友可以參考一下

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

<?phpnamespace 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');?>

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

<?phpnamespace 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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.