设计模式为了解决软件设计中,反复出现的问题,所提出的解决方案。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;