设计模式(一)单例模式
设计模式为了解决软件设计中,反复出现的问题,所提出的解决方案。1990年由Erich Gamma从建筑设计领域引入计算机科学。设计模式主要用于避免引起麻烦的紧耦合,增强软件适应变化的能力。
算法不是一种设计模式,算法主要用来解决计算上的问题,非设计上的问题。
设计模式分享wiki地址:http://wiki.c2.com/?WikiWikiWeb
单例模式:
单例对象的类必须保证只有一个实例存在。
设计关键:
构造函数定义为私有,防止其他代码实例化该类
一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getinstance这个名称)
单例模式在多线程下需要注意:最好提供一个互斥锁,防止生成两个实例。
构建方法:
懒汉方式:全局的单例实例在第一次被使用时构建
饿汉方式:全局的单例实例在类装载时构建:注意:php不支持饿汉模式,因为php不支持在类定义的时候给类的成员变量赋予非基本类型的值。如表达式,new操作等。
php实现单例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 ; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步