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