设计模式(一)单例模式

  设计模式为了解决软件设计中,反复出现的问题,所提出的解决方案。1990年由Erich Gamma从建筑设计领域引入计算机科学。设计模式主要用于避免引起麻烦的紧耦合,增强软件适应变化的能力。

  算法不是一种设计模式,算法主要用来解决计算上的问题,非设计上的问题。

  设计模式分享wiki地址:http://wiki.c2.com/?WikiWikiWeb

单例模式:

  单例对象的类必须保证只有一个实例存在。

  设计关键:

    构造函数定义为私有,防止其他代码实例化该类

    一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getinstance这个名称)

    单例模式在多线程下需要注意:最好提供一个互斥锁,防止生成两个实例。

  构建方法:

    懒汉方式:全局的单例实例在第一次被使用时构建

    饿汉方式:全局的单例实例在类装载时构建:注意:php不支持饿汉模式,因为php不支持在类定义的时候给类的成员变量赋予非基本类型的值。如表达式,new操作等。

  php实现单例代码:

class singlePattern{
    private static $_instance = null;//非静态变量不能够用::方式访问
    private function __construct(){//私有化构造函数,防止其他代码实例化该对象
        
    }
    
    private function __clone(){//私有该函数,防止有代码克隆已经获取到的实例
        
    }
    
    public static function getInstance(){//必须声明为静态方法,类可以直接调用
        if(self::$_instance == null){
            self::$_instance = new singlePattern();
        }
        
        return self::$_instance;
    }
    
    public function test(){
        echo "single pattern success!";
    }
}
$single = singlePattern::getInstance();
$single->test();
$single1 = new singlePattern();
$single2 = clone $single;

  

 

  

  

原文地址:https://www.cnblogs.com/maggie94/p/6729770.html