• php中的单例模式


    最近在读《php面向对象、模式与实践》一书,正好读到了设计模式的相关章节,感觉需要整理下自己的学习内容,所以准备写写笔记,就当巩固和复习了。

    今天我们先从最简单的模式——单例模式开始。

    首先,我们需要知道,什么是单例模式?

    定义:生成一个且只生成一个对象实例的特殊类。

    其次:单例模式有哪些使用场景?什么地方会用到单例模式呢?

    在我们平常开发中,单例模式使用场景还是比较多,比如说数据库对象。

    据我分析在这里使用单例模式有四个原因:

    1.数据库对象在任何地方需均可访问和使用,类似于全局变量。

    2.但是数据库对象又不应该存储在会被覆写的全局变量中,容易被覆写。

    3.系统中只需要一个数据库对象,这样可以保证在一处进行查询,在另外一处可以此次查询的信息(即数据同步)

    总结:

    上面三条其实也是单例模式使用的信号,如果业务出现上述的要求时,就说明可以使用单例模式了。

    最后:如何使用php实现单例模式?

    具体代码如下:

     1 <?php
     2 # 单例模式实现代码 create by diysnake
     3 class singleTon
     4 {
     5     # 用来存储单例对象的私有静态属性
     6     private static $instance;
     7 
     8     # 构造函数,private用来防止直接实例化
     9     private function __construct()
    10     {
    11         
    12     }
    13  
    14     # 用来实例化单例对象的静态方法
    15     public function getInstance()
    16     {
    17         if(empty(self::$instance))
    18         {
    19             self::$instance = new self();
    20         }        
    21         return self::$instance;
    22     }    
    23 }

    以上代码需要注意的地方如下:

    1.$instance变量必须是static的,因为静态方法getInstance中无法使用$this来访问对象属性,只能通过关键字self来获取类中的静态属性;还有,因不允许用户在外部直接使用singleTon::$instance获取该变量的值,所以$instance变量必须是private或者protected的。

    2.构造函数的权限修饰符需要使用private或者protected,这样当开发人员直接在外部使用new实例化该类时,会给出权限相关的错误,可以指引其正确的实例化该类。

    3.getInstance静态方法中先判断self::$instance是否有值,如果有直接返回;如果没有,则实例化后再返回 

    当然单例模式的具体代码有多种,这里给出的是其中一种。

    以上就是我对php中简单工厂、工厂模式和抽象工厂的初步理解,感谢您的阅读

    注:因本人的技术有限,如果有理解错误的地方,还请各位批评指正,共同交流学习,谢谢。我会继续努力的。

  • 相关阅读:
    html5学习笔记2——新元素
    html5学习笔记——基础
    html学习笔记之2——多媒体
    Python调试打印错误信息
    Python随机字符串验证码
    js传递数组
    js上传图片并预览
    JS获取当前日期、比较日期大小
    nrm管理npm源
    使用Git Subtree在多个项目中共用同一个子项目
  • 原文地址:https://www.cnblogs.com/lovecucu/p/6037912.html
Copyright © 2020-2023  润新知