什么是单例模式?

Posted 穿个格子衫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是单例模式?相关的知识,希望对你有一定的参考价值。

单例模式(Singleton Pattern)是 php 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
如何来控制对象既不能实例化,下面代码是我的思路,当然肯定不止这一种方法。
1.这个代码如何变成单例模式呐?
<?php//如何实现单例模式,类只能实例化一次以随机数示例:mt_rand(1,10000)class abx{ function __construct(){ var_dump (mt_rand(1,10000));//创造随机数 }}new abx();new abx();new abx();?>

什么是单例模式?

2.如果把构造函数变成受保护的,这样调用的时候就不能外部访问了,但是这样还是可以多次调用,虽然只转让了控制,代码如下:

<?php//如何实现单例模式,类只能实例化一次以随机数示例:mt_rand(1,10000)class abx{ protected function __construct(){ var_dump (mt_rand(1,10000));//创造随机数 }static function axdc(){ return (new abx); }}abx::axdc();abx::axdc();?>

什么是单例模式?

3.如果加一个变量来判断它是否调用,如果调用不为空,就返回已经调用的值,这样不就可以控制了。

<?php//如何实现单例模式,类只能实例化一次以随机数示例:mt_rand(1,10000)class abx{ public static $a = null; protected function __construct(){ echo (abx::$a = (mt_rand(1,10000)));//创造随机数 }static function axdc(){ if((abx::$a)===null) { return (new abx); } echo(abx::$a); }}abx::axdc();echo"____________";abx::axdc();?>

4.上面代码,看着是成功了,但是我测试了一下,继承居然可以调用,功亏一溃。


<?php//如何实现单例模式,类只能实例化一次以随机数示例:mt_rand(1,10000)class abx{ public static $a = null; protected function __construct(){ echo (abx::$a = (mt_rand(1,10000)));//创造随机数 }static function axdc(){ if((abx::$a)===null) { return (new abx); } echo(abx::$a); }}
class asx extends abx{ function __construct(){ echo (abx::$a = (mt_rand(1,10000)));//创造随机数 }} new asx();echo "___";new asx();?>

5.假如我们加一个最终类不就解决了。
<?php//如何实现单例模式,类只能实例化一次以随机数示例:mt_rand(1,10000)class abx{ static $a = null;final protected function __construct(){ echo (abx::$a = (mt_rand(1,10000)));//创造随机数 }final static function axdc(){ if((abx::$a)===null) { return (new abx); } echo(abx::$a); }}abx::axdc();echo "_____";abx::axdc();?>

如上就是我研究单例模式的代码!



单例模式特点:
  • 1、单例类只能有一个实例。

  • 2、单例类必须自己创建自己的唯一实例。

  • 3、单例类必须给所有其他对象提供这一实例。


以上是关于什么是单例模式?的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之单例模式

什么是单例模式(下)

java的单例模式怎么能保证始终是单例

什么是单例模式(上)

什么是单例模式

什么是单例模式