我对单例模式的理解便是可以减少new的操作,由于new操作的时候会花费内存,如果进行大量的new操作,就会花费大量的内存。
例如:
class abc {

}$a = new abc;$b = new abc;$c = new abc;$d = new abc;echo "内存初始: ".memory_get_usage()."B\n";echo '<pre>';var_dump($a);echo '</pre>';echo "内存利用: ".memory_get_usage()."B\n";echo '<pre>';var_dump($b);echo '</pre>';echo "内存利用: ".memory_get_usage()."B\n";echo '<pre>';var_dump($c);echo '</pre>';echo "内存利用: ".memory_get_usage()."B\n";echo '<pre>';var_dump($d);echo '</pre>';echo "内存利用: ".memory_get_usage()."B\n";echo "峰值: ".memory_get_peak_usage()."B\n"
输出结果:
这里每一次new 操作就会增加内存的占用。而利用单例模式则不会造成这种情形。
单例模式的要点1.某个类只能有一个实例。
2.必须自行创建这个实例。
3.必须自行向全体系统供应这个实例。
下面是创建一个单例类的示例:
/ @purpose: 创建一个单例类 Class Single/class Single { / @var Object 保存类实例的静态成员变量 / private static $_instance; / Single constructor. 私有的布局方法 / private function __construct(){ echo 'This is a Constructed method;'; } / @purpose: 创建私有__clone方法防止工具被复制克隆 / private function __clone(){ } / @return Single|Object 单例方法,用于访问实例的公共的静态方法 / public static function getInstance(){ if(!(self::$_instance instanceof self)){ self::$_instance = new self; } return self::$_instance; }}
现在我们进行实例化输出:
这里可以看出就算多次实例化内存也没有进行增长;
单例模式的用途1.单例模式可以运用在数据库的操作类上
2.单例模式可运用在网站的计数器上
3.运用程序的日志运用,一样平常都利用单例模式实现,这一样平常是由于共享的日志文件一贯处于打开状态,由于只能有一个实例去操作,否则内容不好追加。
4.Web运用的配置工具的读取,一样平常也运用单例模式,这个是由于配置文件是共享的资源。