单例模式

单例模式,一个类只被实例化一次。

类中用静态属性和静态方法去判断唯一性,要注意clone的问题。

Java中还要注意多线程同时实例化对象的坑,Php基本不存在这个问题,就不予考虑了。不过可以通过以下两个方案解决:
1. 急切创建实例。静态属性直接赋值单例对象,这样类调用时已经存在了对象。

2. 锁机制。实例化对象时加锁,完成后解锁。多线程中不会出现生成两个对象的坑了。

上代码:

<?php

interface People{
	public function create();
}

class Factory{
	private static $instance = null;

	public static function getInstance() {
		if (!self::$instance) {
			self::$instance = new Factory();
		}
		return self::$instance;
	}

	public function __clone() {
		// 注意,复制对象完成后会在这里改变属性值,解决对象属性浅复制问题
		// 拒绝复制不要直接return false,而是抛出错误,或者改方法public属性为private
		trigger_error('Clone is not allowed !');
	}
}

$factory = Factory::getInstance();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值