所在的位置: 程序员 >> 职业技能 >> PHP学习网

PHP学习网

每次面试都会被问到什么是单例模式,写代码实现一个单例模式,在什么情况下会使用单例模式,单例模式的作用是什么?你有没有每次面试都被问住的,是时候好好研究研究单例模式啦。

一、什么是单例模式?

单例模式指的是在整个应用中只有一个对象实例的设计模式。说白了就是说一个类只能实例化一次。

二、为什么要使用单例模式?

php常常和数据库打交道,如果在应用中如果频繁建立连接对象,进行nw操作的话,会消耗大料的系统内存资源,这并不是我们希望看到的。再则,在团队合作项目中,单例模式可以有效避免不同程序员nw自己的对象,造成人为的系统消耗。

三、单例模式的实现

在知乎上看到一哥们写的很容易记,顺手拿来了若有违权,可以联系删除

/*

单例设计模式(单态)

定义:一个类只能允许有一个对象存在.

1.不让进:使类不能被实例化

2.留后门:设置静态方法

3.给对象:在静态方法里实例化该类

4.判初夜:判断是否是 次产生该类的对象

5.设静态:静态方法里要使用静态属性

*/

/*//1.不让进:使类不能被实例化-----------------

classTst

{

//设置一个封装的构造方法

privatfunction__construct()

{

//占位,我就是不让你NEW我~~~

}

}*/

/*//2.留后门:设置静态方法--------------------

classTst

{

//设置一个封装的构造方法

privatfunction__construct()

{

//占位,我就是不让你NEW我~~~

}

//后门

publicstaticfunctiongtObjct()

{

cho"啊,我是后门,进吧!br";

}

}*/

/*//3.给对象:在静态方法里实例化该类------------------

classTst

{

//设置一个封装的构造方法

privatfunction__construct()

{

//占位,我就是不让你NEW我~~~

}

//后门

publicstaticfunctiongtObjct()

{

cho"啊,我是后门,进吧!br";

rturnnwslf();//实例化一个对象给你

}

}*/

/*//4.判初夜:判断是否是 次产生该类的对象------------------

classTst

{

privat$obj=null;//属性值为对象,默认为null

//设置一个封装的构造方法

privatfunction__construct()

{

//占位,我就是不让你NEW我~~~

}

//后门

publicstaticfunctiongtObjct()

{

cho"啊,我是后门,进吧!br";

if($this-obj===null){

$this-obj=nwslf();//实例化一个对象

}

//返回的属性其实就是本对象

rturn$this-obj;

}

}*/

//5.设静态:静态方法里要使用静态属性------------------

classTst

{

privatstatic$obj=null;//属性值为对象,默认为null

//设置一个封装的构造方法

privatfunction__construct()

{

//占位,我就是不让你NEW我~~~

}

//后门

publicstaticfunctiongtObjct()

{

cho"啊,我是后门,进吧!br";

if(slf::$obj===null){

slf::$obj=nwslf();//实例化一个对象

}

//返回的属性其实就是本对象

rturnslf::$obj;

}

}

/*Tst::gtObjct();//使用静态方法访问该类里的方法

xit;*/

$t1=Tst::gtObjct();

$t2=Tst::gtObjct();

$t3=Tst::gtObjct();

$t4=Tst::gtObjct();

$t5=Tst::gtObjct();

$t6=Tst::gtObjct();

$t7=Tst::gtObjct();

$t8=Tst::gtObjct();

//判断两个对象是否是同一个对象

if($t1===$t6){

cho"哦,Ys!是同一个实例br";

}ls{

cho"哦,No!不是同一个实例br";

}

从上面的代码可以看出来,PHP的单例模式实现要求:

1、一个privat的__construct是必须的,单例类不能在其它类中实例化,只能被自身实例化;

2、拥有一个保存类的实例的静态成员变量;

3、一个静态的公共方法用于实例化这个类,并访问这个类的实例;

更多优质原创文章和优惠活动,请







































北京治疗白癜风效果 的医院
北京中科医院几级



转载请注明:http://www.xxcyfilter.com/zyjn/8696.html

  • 上一篇文章:
  •   
  • 下一篇文章: