zoukankan      html  css  js  c++  java
  • 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(){
      //执行一些操作
     }
    }
    ?>
  • 相关阅读:
    LeetCode Path Sum II
    LeetCode Longest Palindromic Substring
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Binary Tree Maximum Path Sum
    LeetCode Find Peak Element
    LeetCode Maximum Product Subarray
    LeetCode Intersection of Two Linked Lists
    一天一个设计模式(1)——工厂模式
    PHP迭代器 Iterator
  • 原文地址:https://www.cnblogs.com/zzming/p/2572965.html
Copyright © 2011-2022 走看看