本篇文章介紹的內容是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]; } }?>