這篇文章介紹的內容是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('db',$db); //将实例化后的类注册到全局注册树中 return $db; } } //外部调用得到$db对象 $db = Frame\Factory::createDatabase(); //获取全局注册树中的对象 $db = Frame\Register::get('db'); //卸载全局注册树中的对象 $db = Frame\Register::_unset('db'); ?>
二、單例模式:只允許在類別的本身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中文網其他相關文章!