1.1、定义
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
1.2、单例模式模式四要素
1.3、单例模式根据实例化对象时机的不同分为两种
一种是饿汉式单例,饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;
一种是懒汉式单例,而懒汉式在调用取得实例方法的时候才会实例化对象。
1.4、单例模式优点
1.5、适用场景
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 ?>
想到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/
声明:以上只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接