数据对象映射模式(通过工厂模式和注册树模式)v2

<?php

define("BASDIR",__DIR__);
include BASDIR."/Phpclass/Loader.php";
spl_autoload_register("\\Phpclass\\Loader::autoload_rege");

class Page
{
function index()
{
//工厂模式
$user = Phpclass\Factory::getuser(1);//这里用的工厂方法
$user->username = "admintest";
$this->nextone();
echo "ok";
}

function nextone()
{
//工厂模式
$user = Phpclass\Factory::getuser(1);//但如何像这样子做的话,就要创建两次对象
$user->phone_no = "78978979";

}
//注册树模式-------------
function index1()
{
//注册树模式
$user = Phpclass\Factory::getuser1(1);//这里用的工厂方法,然后,再用注册树的模式
$user->username = "admin11111";
$this->nextone1();
var_dump($user);
}
function nextone1()
{
//注册树模式
$user = Phpclass\Factory::getuser1(1);//这里再次调用的就是同一个对象了(因为注册树模式那里会先判断再创建)
$user->phone_no = "888811111";
var_dump($user);//最后显示的是同一个对象
}
}


$page = new Page();
$page->index1();
---------------------------------------------------------------------------------------------Index4.php
<?php
namespace Phpclass;

//工厂模式是惯用的基础模式,其它高级模式都依赖于它
class Factory
{
static function getuser($id)
{
$user = new User($id);
return $user;
}

//用注册器模式创建一个对象
static function getuser1($id)
{
$key ="user_".$id;//创建一个数组的索引名称(对注册树,保存对象做准备)

$user = Register::get($key);//通过注册树的方法去看,有没有创建 $user

if(!$user){
$user = new User($id); //若没有就重新创建一个,然后,再把他放到注册树上,并返回
Register::set($key,$user);
return $user;
}
return $user; //若有就直接返回
}

}
---------------------------------------------------------------------------------------------Factory.php
 
<?php

namespace Phpclass;
class Register
{

protected static $objects;//这里把所有的对象存放到的个数组里面

static function set($key,$obj)//把一个对象注册到注册树上
{
self::$objects[$key] = $obj;
//echo "第一步把注册好的对象,放到数组里面去,Register.php\n";
}

static function get($key)
{
return self::$objects[$key];
}

function _unset($key)
{
unset(self::$objects[$key]);
}

}
 
---------------------------------------------------------------------------------------------Register.php
 





猜你喜欢

转载自www.cnblogs.com/nfyx/p/10747895.html
今日推荐