Blogger Information
Blog 14
fans 1
comment 0
visits 25777
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP经典设计模式(单例、工厂、注册树模式)
centcool的博客
Original
947 people have browsed it
<?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;


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post