博客列表 >PHP经典设计模式(单例、工厂、注册树模式)

PHP经典设计模式(单例、工厂、注册树模式)

centcool的博客
centcool的博客原创
2019年05月27日 10:35:31946浏览
<?php
/**
 * PHP经典设计模式
 * 单例模式
 * 工厂模式
 * 注册树模式
 */

// 单例模式
calss Site{

	// 属性
	public $siteName;

	// 本类的静态实例
	protected static $instance = null;

	// 禁用掉构造器
	private function __construct($siteName){
		$this->siteName = $siteName;
	}

	// 获取本类唯一实例
	public static function getInstance($siteName = '我在学习Thinkphp5.1'){
		
		

		if(!self::$instance instanceof self){   		// 判断当前类的属性 $instance 是不中当前类的一个实例
			self::$instance = new self($siteName); 		// 如果不是就创建它
		}
		return self::$instance;  						// 如果已经是当前类的实例,就返回 self::$instance 
	}

}

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

// 对象注册树
/**
 * Class Register
 * 1. 注册:set(),把对象挂到树上
 * 2. 获取:get(),把对象取下来
 * 3. 注销:_unset(),把对象注销掉
 */
class Register{

	// 创建对象池:数组
	protected static $objects = [];
	// 生成对象并上树
	public static function set($alias,$objects){
		self::$objects[$alias] = $objects;
	}

	// 从树上取下对象
	public static function get($alias){
		return self::$objects[$alias];
	}

	// 把树上的对象注销
	public static function _unset($alias){
		unset(self::$objects[$alias]);
	}

}

// 将Site类的实例上树:放到对象池
Register::set('site',Factory::create());
// 从树上取一个对象下来
$obj = Register::get('site');
// 查看一下这个对象
var_dump($obj);
echo '<hr>';
echo $obj->siteName;


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