单例模式
2018-06-22 05:16:05来源:未知 阅读 ()
1、简介
1.1、定义
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
1.2、单例模式模式四要素
- 私有的构造方法
- 私有克隆方法
- 指向自己实例的私有静态引用
- 以自己实例为返回值的静态的公有的方法
1.3、单例模式根据实例化对象时机的不同分为两种
一种是饿汉式单例,饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;
一种是懒汉式单例,而懒汉式在调用取得实例方法的时候才会实例化对象。
1.4、单例模式优点
- 在内存中只有一个对象,节省内存空间。
- 避免频繁的创建销毁对象,可以提高性能。
- 避免对共享资源的多重占用。
- 可以全局访问。
1.5、适用场景
- 需要频繁实例化然后销毁的对象。
- 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
- 有状态的工具类对象。
- 频繁访问数据库或文件的对象。
- 。。。。。
2、PHP代码实现
1 <?php 2 #单例模式 3 class Singleton 4 { 5 private static $_instance; 6 private function __construct(){} #私有构造方法 7 private function __clone(){} #私有克隆方法 8 public static function getInstance() #静态共有方法实例化对象 9 { 10 if(!(self::$_instance instanceof self)) 11 { 12 self::$_instance=new self(); #指向实例的私有静态引用 13 } 14 return self::$_instance; 15 } 16 17 } 18 19 ?>
3、融合memcached的单例模式
想到memcached能够存储对象,灵光一闪如果将实例化的对象存储在memcached内存中,需要就拿出来。那样就可以避免每次循环执行脚本都要实例化,这不就从单例模式的基础上更进一步了么。
撸起袖子那就开干啦,下面的代码就是将memcached融合到了单例模式中的类。
【注意注意】:
这里将memcached融合到单例模式中仅仅只是用来进行实验测试(实现自己脑子里的想法),最终结果能否优化啥的,暂时不知道。
1 <?php 2 #单例模式+memcached(使用内存的单例模式) 3 class Singleton 4 { 5 private static $_instance; 6 private function __construct(){} 7 private function __clone(){} 8 public static function getInstance() 9 { 10 if(!(self::$_instance instanceof self)) #检查$_instance有没有对象 11 { 12 #在memcached查询看存不存在此类的对象 13 $m=new memcached(); 14 $m->addserver('192.168.95.11', 11211); 15 $singleton=$m->get('singleton'); 16 if($singleton) #存在 17 { 18 #测试---start 19 echo "memcached中有object:<br/>"; 20 echo "<pre>"; 21 var_dump($singleton); 22 echo "</pre><hr/>"; 23 #测试---end 24 self::$_instance=$singleton; 25 } 26 else #不存在,在进行单例生成对象 27 { 28 #测试---start 29 echo "memcached中不存在object<br/><hr/>"; 30 #测试---end 31 self::$_instance=new self(); 32 echo "new object<br/>"; 33 $m->set('singleton', self::$_instance); 34 } 35 36 } 37 return self::$_instance; 38 } 39 40 public function test() 41 { 42 echo "this is test!<br/>"; 43 } 44 45 } 46 47 header("content-type:text/html;charset=utf8;"); 48 $obj=Singleton::getInstance(); 49 $obj->test(); 50 echo "<pre>"; 51 var_dump($obj); 52 echo "</pre>"; 53 54 55 $obj2=Singleton::getInstance(); 56 $obj2->test(); 57 echo "<pre>"; 58 var_dump($obj2); 59 echo "</pre>";die; 60 61 ?>
第一次访问:
第二次访问:
memcached中:
(以上是自己的一些见解与总结,若有不足或者错误的地方请各位指出)
作者:那一叶随风 http://www.cnblogs.com/phpstudy2015-6/
声明:以上只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:php简单实现二级联动
下一篇:php将多个值的数组去除重复元素
- PHP设计模式之工厂模式详解 2020-02-19
- 分析php中注册器模式类用法实例 2019-12-02
- PHP的五种设计模式 2019-09-23
- PHP 设计模式之观察者模式介绍 2019-08-29
- 【多进程】php实现 master-worker 守护多进程模式 2019-07-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash