PHP面对对象设计模式之单例模式
单例模式是面向对象语言里最常用、也是最简单的一种模式。
单例就是单个实例,单个对象的意思,就是说我们去实例化一个类的时候,不管调用多少次,都永远只有一个实例, 不会有多个,这样就节省了内存分配开支。
单例模式的原理:
将构造函数__construct设置为私有的private, 对外提供一个static静态方法比如:getInstance获得实例,在getInstance方法里来做统一判断是否有new一个实例,有的话直接返回,没有就new一个,这样就保证了不管外面调用多少次,只保证new了一次。
单例模式的例子:
< ?php
// PHP面对对象设计模式之单例模式
class Single{
private $props = array();
// 保存例实例在此属性中
private static $instance;
// 构造函数声明为private,防止直接创建对象
private function __construct(){}
// 单例方法
public static function getInstance(){
if(empty(self::$instance)){
self::$instance = new Single();
}
return self::$instance;
}
// 设置属性和属性值
public function setProperty($key,$val){
$this->props[$key] = $val;
}
// 读取值
public function getProperty($key){
return $this->props[$key];
}
}
// 得到Single类的单例对象
$single1 = Single::getInstance();
// 设置一个属性 name 的值 为明凯博客
$single1->setProperty("name","明凯博客");
// 移除引用
unset($single1);
// 得到Single类的单例对象
$single2 = Single::getInstance();
// 输出属性name 的属性值 该属性值未丢失
print $single2->getProperty("name");
返回:
明凯博客
从结果我们看出,$single1和$single2其实是同一个引用的,这样就达到了我们的目的。而且也节约了内存。在同一个生命周期中,不管调用多次,永远只有一个实例。
单例模式的用处:
用处是确保某个类只有一个实例,避免产生多个对象消耗过多的资源,或者某个类型的对象只应该有一个。
创建一个对象需要消耗的资源过多,这时就要考虑使用单例模式。
1. 网站的计数器,一般也是采用单例模式实现,同步起来非常简单。
2. 网站的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
3. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
4. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
5. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
php中this,self,parent,const关键字的用法 PHP面对对象设计模式之工厂模式
Hi to all, how is all, I think every one is getting more from this web site, and your views are fastidious designed for new visitors.
I need to to thank you for this very good read!! I certainly loved every bit of it. I’ve got you book-marked to look at new stuff you
Your point of view caught my eye and was very interesting. Thanks. I have a question for you.