zoukankan      html  css  js  c++  java
  • 数据对象映射模式(通过工厂模式和注册树模式)v2

    <?php

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

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

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

    }
    //注册树模式-------------
    function index1()
    {
    //注册树模式
    $user = PhpclassFactory::getuser1(1);//这里用的工厂方法,然后,再用注册树的模式
    $user->username = "admin11111";
    $this->nextone1();
    var_dump($user);
    }
    function nextone1()
    {
    //注册树模式
    $user = PhpclassFactory::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 ";
    }

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

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

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





  • 相关阅读:
    数据库模糊查询
    Redis集群简介
    POI导出Excel的三种 workbook的区别
    mysql主从跳过错误
    MySQL server has gone away 问题解决方法
    Redis批量删除key的命令
    Python 3.6学习笔记(一)
    maven项目报错
    使用zabbix监控mysql的三种方式
    postgresql初体验
  • 原文地址:https://www.cnblogs.com/nfyx/p/10747895.html
Copyright © 2011-2022 走看看