zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式的必要性:

    1. 目的:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
    2. 要点:
        1). 某一个类只能有一个实例;
        2). 必须自行创建这个实例;
        3). 必须自行向整个系统提供这个实例。
    3. 作用:避免重复实例化,节省系统资源。例如在数据库操作方面,会大量存在数据库连接操作,单例类可以避免多次连接数据库而消耗资源,减轻对数据库服务器的压力。


    单例类的写法:三私一公二静态

    1、私有的构造方法:防止类外被实例化,从而失去单例的意义。
    2、私有克隆方法:防止传到类外的对象被克隆,从而无法保证对象的唯一。
    3、私有静态的属性:私有的目的是防止这个属性在类外被修改。用来保存在本类中生成的唯一一个实例。 静态的目的是什么呢?之所以静态,是因为该属性要被在静态方法中调用。
    4、共有的静态方法:这个方法是唯一将实例传输到类外使用的途径。子所以是公有的,是因为要被在类外调用。之所以静态,是因为单例类中的构造方法是私有的,没办法用对象调用该方法,而只有静态方法才不需要对象调用。
    这个公有的静态方法必须有返回值,将当前类中私有静态属性返回。而这个静态属性中已经存储了那个唯一的实例化后的对象。

    备注:单例模式强调类的静态调用,保证一个进程对一个类的多次调用只产生一个对象。

    案例   ---    连接数据库单例类

    class Dbconn {
            public $link;
            private static $_instance;
    
            private function __construct() {
    	 //连接数据库操作
    	   }
    
            private function __clone(){}
            public static function getInstance() {
                //判断当前私有的属性$_instance是否是经过自身实例化来的一个对象?
                if(!self::$_instance instanceof self) {
                    self::$_instance = new self();
                }
                return self::$_instance;
            }
        }
    /*** 单例模式数据库连接项目实例*/
    class Dbconn {
        public $link;
        private static $_instance;
    
        private function __construct() {
         $arr=Loadconfig::getConfig(); //钩子方法
          $mylink=mysql_connect($arr['hostname'] , $arr['username'] , $arr['password']);
          if($mylink){
               mysql_query('set names '. $arr['charset']);
              if(mysql_select_db($arr['dbname'])) {
                    $this->link = $mylink;
                } else {
                    die('数据库连接失败');
                       }
            } else {
                die('连接数据库服务器失败');
           }
        }
    
        //私有化,禁止克隆这个对象
        private function __clone() {}
    
       //这个方法是为了获取一次实例,也就是一次数据库连接对象。
       //必须通过此方法得到对象的引用   这个类用了单例模式的写法
        public static function getInstance() {
            if(!self::$_instance instanceof self) {
                self::$_instance = new self();
            }
            return self::$_instance;
        }

    
    
  • 相关阅读:
    mysql
    makefile
    KNN算法(k-nearest neighbor)
    时间序列
    python易错题之lambda 以及 for循环中内嵌函数
    python易错题之作用域
    html----不常见标签
    js----DOM对象(3
    js----DOM对象(事件)
    js----对象
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3301637.html
Copyright © 2011-2022 走看看