博客列表 >单例模式、工厂模式、注册树模式示例

单例模式、工厂模式、注册树模式示例

LIWEN的博客
LIWEN的博客原创
2018年01月18日 23:27:24708浏览

运行输出如下图:

2018-01-18_232553.png

代码如下:

<?php
/**
 * 单例模式、工厂模式、注册树模式
 */

//单例模式
class webSite
{
    //声明属性
    public $siteName;
    //声明本类的静态实例,并初始化
    protected static $instance = null;
    //禁用构造方法
    private function __construct($siteName)
    {
        $this->siteName = $siteName;
    }
    //禁用克隆
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }
    //获取本类的唯一实例
    public static function getInstance($siteName = 'php中文网')
    {
        if (!self::$instance instanceof self)
        {
            self::$instance = new self($siteName);
        }
        return self::$instance;
    }
}

//工厂模式:用工厂模式来生成本类的单一实例
class Factory
{
    //创建指定类的实例
    public static function create()
    {
        return webSite::getInstance('PHP中文网 www.php.cn');
    }
}

//把生成的唯一实例对象,挂到注册树上去
/**
 * class Register
 * 1、注册:set(),把对象挂到树上
 * 2、获取:get(),把对象从树上取下来用
 * 3、注销:_unset(),把对象吃掉,O(∩_∩)O哈哈~
 */
class Register
{
    //首先,创建对象池,是一个数组
    protected static $objects = [];

    //生成对象,并挂到树上,set()有两个参数,第一个是键名,用别名来做键名;第二个是对象,作为值
    public static function set($alias,$object)
    {
        self::$objects[$alias] = $object;
    }
    //从树上把对象取下来用
    public static function get($alias)
    {
       return self::$objects[$alias];
    }
    //把树上的某个对象吃掉~~~
    public static function _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
}

//将webSite类的实例挂到树上,就是放到对象池
Register::set('site',Factory::create());
//从树上取一个对象下来
$obj = Register::get('site');
//查看一下这个对象长啥样
var_dump($obj);
echo '<hr>';
echo '<h2 style="color: #9A0000">'.$obj->siteName.'</h2>';


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议