zoukankan      html  css  js  c++  java
  • php设计模式学习之单例模式

    某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。

    单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。清单 3 中的代码显示了 PHP V5 中的一个数据库连接单元素。

    在程序中,只允许出现一个该对象

    class Single
    {
        public $dbName;
        private static $instance = null;
    
        private function __construct()
        {
            echo "hello singe<br/>";
        }
    
        function __destruct()
        {
            echo "see you tomorrow<br/>";
        }
    
        public static function getInstance()
        {
            if(!self::$instance instanceof self){
                self::$instance = new Single();
            }
            return self::$instance;
        }
    
        public static function freeSelf()
        {
            self::$instance = null;
        }
    
        public function printInfo()
        {
            echo "this is a single<br/>";
        }
    
        public function printName()
        {
            echo "this is a name<br/>";
        }
    
        public function setDbName($dbName)
        {
            $this->dbName = $dbName;
        }
    
        public function getDbName()
        {
            return $this->dbName;
        }
    }
    $a = Single::getInstance();
    $a->setDbName("hello");
    echo $a->getDbName()."<br/>";

    要点:
     1. $instance必须声明为静态的私有变量 
     2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义 
     3. getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用 
     4. ::操作符只能访问静态变量或静态函数 
     5. PHP的单例模式是相对而言的,因为PHP的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。 
      也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量, 
      还是类的静态成员,都会在页面执行完毕后被清空,结果会重新建立新的对象,这样也就完全失去了Singleton的意义。 
      不过,在实际应用中同一个页面中可能会存在多个业务逻辑,这时单例模式就起到了很重要的作用,有效的避免了重复 

  • 相关阅读:
    Class attributes
    Card objects
    Exercises
    Type-base dispatch
    Operator overloading
    The str method
    loadrunner协议开发
    nmon分析与详解
    如何判断CPU、内存、磁盘的性能瓶颈?
    用友NC客户端地址
  • 原文地址:https://www.cnblogs.com/sign-ptk/p/5687230.html
Copyright © 2011-2022 走看看