资讯专栏INFORMATION COLUMN

PHP设计模式之注册树模式

tracymac7 / 2730人阅读

摘要:简介注册树模式又称注册模式或注册器模式。注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树上采摘的模式设计方法。使用了注册树模式后,对于实例,我们能够更好地统筹管理安排,就像使用全局变量一样的方便实用。

简介

注册树模式又称注册模式注册器模式。注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树上采摘的模式设计方法。和果树不同的是,果子只能采摘一次,而注册树上的实例却可以无数次获取。

使用了注册树模式后,对于实例,我们能够更好地统筹管理安排,就像使用全局变量一样的方便实用。

实现

下面我以代码的形式向大家演示一下,详解请参照代码注释

代码:

";
        }

    }

    /**
     * 销毁注册树中的实例
     *
     * @param $alias 对象别名-注册树中的名称
     */
    public static function _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
}

/**
 * Class demo 演示类
 */
class demo
{
    /*
     * 测试方法
     */
    public function test()
    {
        echo "看这里看这里

"; } } // 实例化测试类,获取对象实例 $demo = new demo(); // 注册到树上 $tree = Register::set("de", $demo); // 取出来 $de_true = Register::get("de"); // 测试 $de_true->test(); // 销毁 Register::_unset("de"); // 尝试再次取出来 $de_true_two = Register::get("de"); // 尝试再次测试 $de_true_two->test();

运行结果:

// 第一次成功运行
看这里看这里
// 第二次销毁后找不到对象实例
您要找的对象实例不存在哦
// 第二次销毁后找不到对象实例,故无法调用对象方法,报错
Fatal error: Call to a member function test() on a non-object in E:phpStudyWWW	est	est.php on line 77
扩展

上面已经通过实例向大家展示了如何构建注册树模式,相信大家应该都明白了,那么下面我们就将注册树模式和工厂模式与单例模式结合起来,看看如何实现他们的代码

代码:

";
        }

    }

    /**
     * 销毁注册树中的实例
     *
     * @param $alias 对象别名-注册树中的名称
     */
    public static function _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
}

/**
 * Class demo 单例演示类
 */
class singleDemo
{
    // 存放实例属性
    public static $_instance;
    public $content;

    // 私有化构造函数,防止外部new
    private function __construct($content)
    {
        $this->content = $content;
    }

    // 获取实例
    public static function getInstance($content)
    {
        // 判断实例是否存在
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self($content);
        }
        return self::$_instance;
    }

    // 私有化克隆方法,防止克隆
    private function __clone()
    {

    }

    // 测试方法
    public function test()
    {
        echo $this->content."
"; } } /** * Class factory 工厂类 */ class Factory { // 生产 public static function create($content) { // 返回对象 return singleDemo::getInstance($content); } } // 加入注册树 Register::set("si",Factory::create("我是content参数内容,哈哈")); // 取出对象实例 $object = Register::get("si"); // 执行测试方法 $object->test(); // 打印对象 var_dump($object);

运行结果:

我是content参数内容,哈哈
object(singleDemo)#1 (1) { ["content"]=> string(34) "我是content参数内容,哈哈" }
地址

关于工厂模式和单例模式,之前的文章我也说过,如果有兴趣,可以从以下地址前往:

PHP设计模式之工厂模式:https://segmentfault.com/a/11...

PHP设计模式之单例模式:https://segmentfault.com/a/11...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22034.html

相关文章

  • php 设计模式工厂模式、单例模式注册模式

    摘要:的设计模式有很多种,本文取最简单的三种模式工厂模式单例模式和注册树模式进行简单的讲解。文件创建完后,咱们回到单元测试文件文件再执行一下单元测试命令发现,也能返回成功,这样的话我们就能很方便的修改任何驱动了。 php 设计模式之工厂模式、单例模式、注册树模式 在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问题,具...

    liangzai_cool 评论0 收藏0
  • php设计模式:工厂模式、单例模式注册模式

    摘要:一工厂模式工厂方法或类中生成对象,而不是在代码中直接优点将某个常用类,多个地方需要时,使用工厂模式,方便类的扩展与维护文件目录正常实例化类获取单例模式的类将实例化后的类注册到全局注册树中外部调用得到对象获取全局注册树中的对象卸载全局注册树中 一、工厂模式:工厂方法或类中生成对象,而不是在代码中直接 new 优点:将某个常用类,多个地方需要 new 时,使用工厂模式,方便类的扩展与维护文...

    孙吉亮 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0
  • 如何"有计划,高效率,优简历"应对面试

    摘要:虽然有了十全的计划,但如何高效率去记住上面那么多东西是一个大问题,看看我是怎么做的。 前言 前一篇文章讲述了我在三月份毫无准备就去面试的后果,一开始心态真的爆炸,但是又不服气,一想到每次回来后家人朋友问我面试结果的期待脸,越觉得必须付出的行动来证明自己了。 面经传送门:一个1年工作经验的PHP程序员是如何被面试官虐的? 下面是我花费两个星期做的准备,主要分三部分: 有计划——计划好...

    gyl_coder 评论0 收藏0

发表评论

0条评论

tracymac7

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<