• PHP设计模式职责和单例模式


    职责和单例模式

    单例模式也认为是指责模式。
    单例类至少拥有以下三种公共元素:
    1、必须拥有一个构造函数,并且必须被标记为private
    2、拥有一个保存类的实例的静态成员变量
    3、拥有一个访问这个实例的公共的静态方法
     单例类只能被自身实例化,所以__construct()方法必须标记为private.


    1、数据库连接职责的集中控制

     1 class Database{
     2  private $_db;          //构造对象时这个变量会被填充
     3  static $_instrance;    //保存类仅有的一个实例
     4  
     5  private function __construct(){    //只能被自身实例化,必须这样定义
     6   $this->_db=mysql_connect('localhost','root','mysql');  
     7   mysql_select_db('zzm',$this->_db);          
     8  }
     9  private function __clone(){}       //防止对象被复制或者克隆
    10  
    11       /**
    12          此静态方法是单例模式的实际构造。此函数会检查静态实例变量是否已保存这个类的一个实例。
    13        如果它没有包含自身的一个实例,类会被初始化并且保存到$_instance变量中。
    14        下一次调用这段代码时,$_instance 变量会保存类的一个实例,并且这个类
    15         不会在实例化。最后,这个方法会返回实例的应用。
    16        **/
    17  public static function getInserance(){
    18   if(!(self::$_instrance instanceof  self)){
    19    self::$_instrance=new self();
    20   }
    21   return self::$_instrance;
    22  }
    23  //使用$this->_db执行一个查询
    24  public function query($sql){
    25   return mysql_query($sql,$this->_db);
    26  }
    27 }
    <?php 
    // 使用单例类
    $db=Database::getInserance();
    $db->query('select * from users');
    //说明:通过调用getinstance()方法,$db现在存有内部存储实例的应用。通过此实例可调用单例类中定义
    的任何非静态方法
    // 如果某个类不需要使用__construct方法,那么这个类就不太适合使用单例模式。
    这样应使用纯静态类, 只需提供一个没有函数体的私有构造函数,并且去掉getInstance()和$_instance成员就可以做到这一点。
    这会防止类被实例化,它通过消除使用这段代码时获得实例的可能性确保了单一职责性。
    
    如下为纯静态类
    class  SomeClass{
     //防止类被当作实例使用
     private function __construct(){}
    
     public static function SomeMethod(){
      //执行一些操作
     }
    }
    ?>
  • 相关阅读:
    Dockerfile构建镜像
    00基础复习
    docker的网络(基础)
    02-Mysql中的运算符
    01-mysql中的数据类型
    Docker客户端连接Docker Daemon的方式
    docker-ce快速部署
    ubuntu18.04 server配置静态ip
    html语义化小记录
    webpack导入es6的简单应用
  • 原文地址:https://www.cnblogs.com/zzming/p/2572965.html
Copyright © 2020-2023  润新知