PHP 设计模式 笔记与总结(10)数据对象映射模式 2

【例2】数据对象映射模式结合【工厂模式】和【注册模式】的使用。

入口文件 index.php:

<?php
define('BASEDIR',__DIR__); //定义根目录常量
include BASEDIR.'/Common/Loader.php';
spl_autoload_register('\\Common\\Loader::autoload');
echo '<meta http-equiv="content-type" content="text/html;charset=utf8">';

class Page{
    function index(){
        //使用工厂方法生成对象,而不是直接new
        $user = Common\Factory::getUser(1);
        $user->name = 'Ozil';
        
        $this->test();
        echo 'success';
    }
    
    function test(){
        //对对象属性的操作就完成了对数据库的操作
        $user = Common\Factory::getUser(1);
        $user->mobile = '13912345678';
        $user->regtime = date("Y-m-d H:i:s",time()); 
    }
}

$page = new Page();
$page->index();

index() 和 test() 中的 $user 对象为同一个对象。 

 

工厂模式文件 Common\Factory.php

<?php
namespace Common;

class Factory{
    static function createDatabase(){
        $db = Database::getInstance();
        //得到数据库对象后,使用注册器模式将该对象映射到全局树上
        Register::set('db1',$db);//db1为映射的别名
        return $db;
    }
    
    static function getUser($id){
        //注册器模式
        $key = 'user_'.$id;
        $user = Register::get($key);
        if(!$user){
            $user = new User($id);
            Register::set($key , $user);
        }
        return $user;
    }
}

 

访问入口文件,就能修改 test 数据库 user 表中 id 为1 的数据。

你可能感兴趣的:(设计模式)