zoukankan      html  css  js  c++  java
  • 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中简单工厂、工厂模式和抽象工厂的初步理解,感谢您的阅读

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

  • 相关阅读:
    全局比对与动态规划
    汉诺塔游戏的递归解析
    scikit-learn 多分类混淆矩阵
    Python argparse 子命令
    优雅的查看json文件
    Python数据结构和算法学习笔记4
    Python学习笔记29
    Python学习笔记28
    Python数据结构和算法学习笔记3
    Python数据结构和算法学习笔记2
  • 原文地址:https://www.cnblogs.com/lovecucu/p/6037912.html
Copyright © 2011-2022 走看看