单例模式 俗称单例3步曲+1曲

什么是单例模式?
    在整个应用中通过这个类只能实例化一个对象实例的设计模式

 

模式分类?

在所有模式设计中,有三种基础设计模式,单例模式,工厂模式,注册树模式,其他模式往往基于这几种模式,今天带来的是单例模式。


为什么要用单例模式?
    1。php常常和数据库打交道,如果在应用中频繁建立连接对象,进行new操作的话,会消耗大量的系统内存资源。(节省资源开销)
    2。在团队合作项目中,单例模式可以有效避免不同程序员new自己的对象时,造成人为的系统消耗。(节省资源开销)


 ------------------实现单例3部曲+1曲------------------

第一步:封装构造方法  private  __construct( ) { }
             原因:   构造函数在 new 出对象的时候第一个调用的方法  构造函数被申明为private或者protected这注定无法通过new的方法创建实例对象了。
 

第二步:   通过类内的方法来创建对象实例。   static Single(){ }
           原因:我们往往往往是创建了对象后才调用对象的方法,而此时需要调用类里面的方法来创建对象。不受是否创建对象影响都能调用的方法的解决方案毋庸置疑那就是利用关键字--static
                   

 第三步:定义一个封装的静态变量    private static $instance
           原因:把实例化的唯一对象放在这个变量里面存起来
            
第四步(加1曲):私有化克隆的魔术方法:__c l o n e ();
            原因:对于一个类的对象,如果使用“clone运算符”,就会克隆出一个跟当前对象完全一样的新对象出来,并且:此时这个新对象还会自动调用该类中的魔术方法:_ _c l o n e ();只要其中有该方法;


代码演示

 1 <?php
 2 
 3 class Sing {
 4     
 5     //第三步:定义一个变量
 6     private static $instance= null;
 7 
 8     //第一步:封装构造函数
 9     private function  __construct(){
10         
11     }
12 
13     //第二步:使用类名调用这个类创建对象实例
14     static  function getSingle(){
15         if( !(self::$instance  instanceof self) ){    //instanceof判断一个对象是否是某个类的实例
16         self::$instance = new self();               //用变量来存储实例化出来的对象
17     }
18         return self::$instance;
19     }
20 
21 
22     //第四步:禁止克隆实例化出来的对象
23     private function __clone(){ }
24 
25 }
26 
27  $danli = Sing::getSingle();
28  var_dump($danli);    //输出   object(Sing)#1 (0) { }
29  $danli2 = Sing::getSingle();   
30  var_dump($danli2);   //输出   object(Sing)#1 (0) { }
31 
32 $obj3 = clone $danli;   //此处禁止克隆单例对象实例
33 var_dump($obj3);  //Call to private Sing::__clone() from context '' in 错误行号
34 
35 
36 ?>

 

转载于:https://www.cnblogs.com/andyhxl/p/5951042.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值