PHP设计模式--单例模式

原创 2016年08月29日 14:59:44

单例模式的必要性:

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;  
            }  
        }  

    <span style="font-size:18px;color:#999999;">/*** 单例模式数据库连接项目实例*/</span>  

    <pre name="code" class="php">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;  
        }</pre><br>  
    <br>  
    <pre></pre>  
    <pre></pre>  


版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式系列(一)单例模式

一、简单介绍 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。 《设计模式》书中对单例模式动机的介绍 对于系统中的某些类...
  • robertcpp
  • robertcpp
  • 2016年06月05日 11:00
  • 2274

慕课网----大话PHP设计模式 三(三种基本设计模式-工厂模式,单例模式,注册树模式)

1)工厂模式: 工厂方法或者类生成对象,而不是代码中直接new 多用来生成对象 好处。如果很多个文件都使用了这个类的话,如果修改需要去每个文件下都进行修改,而使用工厂模式的话,则只用在类里面修改...
  • Rodgexue
  • Rodgexue
  • 2016年02月26日 10:36
  • 3157

单例模式——php单例模式的运用,用单例模式设计实现多例

不断学习不断进步的过程中,坚持用写作的方式记录学习成果真真是极好的习惯。最近笔者学习设计模式,正好有写博客的想法,于是第一篇博客就从设计模式中的一小个——单例模式讲起。     此文于php实现单例...
  • agangdi
  • agangdi
  • 2012年11月06日 15:33
  • 2644

C++设计模式[二]单例模式

接着就是单例模式;个人理解就是把创建方法改为私有,然后再内部实例化,禁止外部创建对象。 何为单例模式,在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个...
  • langb2014
  • langb2014
  • 2015年11月03日 16:11
  • 1088

设计模式(创建型)之单例模式(Singleton Pattern)

单例模式可能是23种设计模式中最简单的。应用也非常广泛,譬如Android中的数据库访问等操作都可以运用单例模式。核心概念: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称...
  • yanbober
  • yanbober
  • 2015年04月27日 16:50
  • 2680

设计模式:单例模式(Singleton)

单例模式在23个设计模式中算得上是最简单的一个了,也行你会有异议,那就换成“最简单之一”,这样就严谨了很多。   单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   适用性:当类...
  • u013256816
  • u013256816
  • 2016年03月23日 21:37
  • 4949

单件模式(Singleton Pattern)(二):HeadFirst中的巧克力工厂的设计

以《HeadFirst设计模式》中的巧克力工厂为例,介绍单件模式的使用场景。 一、问题描述    现代化的巧克力工厂具备计算机控制的巧克力锅炉,锅炉做的事就是把巧克力和牛奶融在一起...
  • jialinqiang
  • jialinqiang
  • 2013年05月11日 09:24
  • 2427

使用Object-C实现23种设计模式之单例模式

今天给大家讲解一下第四种创建模式——单例模式,单例模式不同于前几种,前几种更注重逻辑,而单例模式则偏重于内存管理以及实际运用,相对前几种要相对简单。 所谓单例模式,就是一种让某个类只产生单一实例的模式...
  • u013054715
  • u013054715
  • 2016年05月23日 22:43
  • 4403

浅谈常见设计模式--单例模式 简单工厂模式

今题那站在这里和大家一起分享最近在一本书上看到的关于设计模式的内容,接下来要讲的设计模式有: 单例模式 简单工厂模式 工厂方法和抽象工厂 代理模式 命令模式 策略模式 门面模式 桥接模式 观察者模式 ...
  • xikai18827083487
  • xikai18827083487
  • 2016年11月13日 17:04
  • 992

2.php的设计模式:单例模式

我都对自己有点无语了,又要开始写单例模式,都TM是套路。 不过话虽如此,套路照打。 声明 据说当前单例模式已被列入反模式的行列了,不过我还在用,因为需要。有需求就有市场。 他的一个好处是,确保...
  • hel12he
  • hel12he
  • 2016年06月01日 11:43
  • 602
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP设计模式--单例模式
举报原因:
原因补充:

(最多只允许输入30个字)