PHP设计模式之-----单利模式

<?php
//在所有模式设计中,有三种基础设计模式,单例模式,工厂模式,注册树模式,其他模式往往基于这几种模式,今天带来的是单例模式。
//http://www.cnblogs.com/DeanChopper/p/4761253.html
class Single{
	public $hash;
	static protected $ins=null;
	final protected function __construct(){
		$this->hash = rand(1,9999);
	}
	static public function getInstance(){
		if(self::$ins instanceof self){
			return self::$ins;
		}
		self::$ins = new self();
		return self::$ins;
	}
}
$a = Single::getInstance();
echo $a->hash;
echo '<br>';
$aa = Single::getInstance();
echo $aa->hash;


/*
单例设计模式 (单态)
    定义: 一个类 只能允许有 一个对象存在.
    1.不让进: 使类不能被实例化
    2.留后门: 设置静态方法
    3.给对象: 在静态方法里实例化该类
    4.判初夜: 判断是否是 第一次产生该类的对象
    5.设静态: 静态方法里 要使用静态属性
 */

/*//1.不让进: 使类不能被实例化-----------------*/
class Test
{
    // 设置 一个封装的构造方法
    private function __construct()
    {
        //占位, 我就是不让你NEW我~~~
    }
}

/*//2.留后门: 设置静态方法--------------------*/
class Test
{
    // 设置 一个封装的构造方法
    private function __construct()
    {
        //占位, 我就是不让你NEW我~~~
    }
    //后门
    public static function getObject()
    {
        echo "啊,我是后门,进吧!<br>";
    }
}

/*//3.给对象: 在静态方法里实例化该类------------------*/
class Test
{
    // 设置 一个封装的构造方法
    private function __construct()
    {
        //占位, 我就是不让你NEW我~~~
    }
    //后门
    public static function getObject()
    {
        echo "啊,我是后门,进吧!<br>";
        return new self();//实例化一个对象给你
    }
}

/*//4.判初夜: 判断是否是 第一次产生该类的对象------------------*/
class Test
{
    private $obj = null;//属性值为对象,默认为null
    // 设置 一个封装的构造方法
    private function __construct()
    {
        //占位, 我就是不让你NEW我~~~
    }
    //后门
    public static function getObject()
    {
        echo "啊,我是后门,进吧!<br>";
        if ($this->obj === null) {
            $this->obj = new self();//实例化一个对象
        }
        //返回的属性 其实就是本对象
        return $this->obj;
    }
}

//5.设静态: 静态方法里 要使用静态属性------------------
class Test
{
	private static $obj = null;//属性值为对象,默认为null
	// 设置 一个封装的构造方法
	private function __construct()
	{
		//占位, 我就是不让你NEW我~~~
	}
	//后门
	public static function getObject()
	{
		echo "啊,我是后门,进吧!<br>";
		if (self::$obj === null) {
			self::$obj = new self();//实例化一个对象
		}
		//返回的属性 其实就是本对象
		return self::$obj;
	}
}

/*Test::getObject();//使用静态方法访问该类里的方法
exit;*/

$t1 = Test::getObject();
$t2 = Test::getObject();
$t3 = Test::getObject();
$t4 = Test::getObject();
$t5 = Test::getObject();
$t6 = Test::getObject();
$t7 = Test::getObject();
$t8 = Test::getObject();

//判断 两个对象 是否是同一个对象
if ($t1 === $t6) {
	echo "哦, Yes! 是同一个实例<br>";
} else {
	echo "哦, No! 不是同一个实例<br>";
}

//第五步是成品,前面4步都是一步一步的推的!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值