一个案例来认识PHP经典设计模式

  • A+
所属分类:PHP 技术杂谈

<?php
/**
 * 单例模式
 */
class Site
{
	//属性
	public $siteName;
	//本类的静态实例
	public static $instance = null;
	//禁用掉构造器
	private function __construct($siteName)
	{
		$this->siteName = $siteName;
	}
	//获取本类唯一实例
	public static function getInstance($siteNme = '默认siteName值')
	{
		//判断实例是不是自己的一个实例
		if(!self::$instance instanceof self){
			self::$instance = new self($siteNme);
		}
		return self::$instance;
	}
}

/**
 * 工厂模式
 * 生成本类的单一实例
 * Class Factory
 */
class Factory
{
	public static function create($patternName)
	{
		return Site::getInstance($patternName);
	}
}

/**
 * 对象注册树
 * 注册:set(); 把对象挂到书上
 * 获取:get(); 把对象从树上获取下来
 * 注销:_unset(); 把对象销毁
 * Class Register
 */
class Register
{
	//创建对象数组
	protected static $object = [];

	//传参 $alias 别名  $object 真正的对象
	//生成对象并挂到树上
	public static function set($alias,$object)
	{
		self::$object[$alias] = $object;
	}
	// 把对象从树上获取下来
	public static function get($alias)
	{
		return self::$object[$alias];
	}
	// 把对象销毁
	public static function _unset($alias)
	{
		unset(self::$object[$alias]);
	}
}

Register::set('zhangObj',Factory::create('实例个鸡儿1'));
$obj = Register::get('zhangObj');
var_dump($obj);

运行结果:

object(Site)[1]
  public 'siteName' => string '实例个鸡儿1' (length=16)

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: