脚本宝典收集整理的这篇文章主要介绍了php设计模式:工厂模式、单例模式、注册树模式,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
一、工厂模式:工厂方法或类中生成对象,而不是在代码中直接 new
优点:将某个常用类,多个地方需要 new 时,使用工厂模式,方便类的扩展与维护
文件目录:Frame/Factory.php
<?php
namespace Frame;
use FrameDatabase;
use FrameRegister;
class Factory
{
static function createDatabase()
{
//$db = new Database(); //正常实例化类
$db = Database::getInstance(); //获取单例模式的类
Register::set('db',$db); //将实例化后的类注册到全局注册树中
return $db;
}
}
//外部调用得到$db对象
$db = FrameFactory::createDatabase();
//获取全局注册树中的对象
$db = FrameRegister::get('db');
//卸载全局注册树中的对象
$db = FrameRegister::_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 = FrameDatabase::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设计模式:工厂模式、单例模式、注册树模式全部内容,希望文章能够帮你解决php设计模式:工厂模式、单例模式、注册树模式所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。