zoukankan      html  css  js  c++  java
  • 单例模式

    问题:
    1. 应用程序不同部分之间需要通过某个类的唯一实例来共享一些数据。
    2. 某个类需要保证其只有唯一实例。

    实现:
    1. 构造方法私有化,防止类外部实例化该类,从而出现多个实例对象。
    2. 使用public静态方法和private静态属性来间接实例化对象。
    代码示例:

    class application
    {
    	private static $app;
    
    	private function __construct()
    	{
    		//构造函数逻辑
    	}
    
    	public static function getInstance()
    	{
    		if(empty(self::$app)) {
    			self::$app = new application();
    		}
    		return self::$app;
    	}
    }
    //获得单例对象
    $app = application::getInstance();
    

    效果:
    1. 可以通过单例对象在应用程序不同部分之间共享一些数据。
    2. 保证唯一实例,不需要多次创建对象,传递对象。

    单例类分类:
    1. 饿汉式单例类:单例类在自己被加载时就将自己实例化(静态初始化)。

    class application
    {
    	private static $app = new application();
    
    	private function __construct()
    	{
    		//构造函数逻辑
    	}
    
    	public static function getInstance()
    	{
    		return self::$app;
    	}
    }
    

    优点:无需考虑多线程访问的安全性问题。
    缺点:需要提前占用系统资源。

    2. 懒汉式单例类:单例类在自己第一次被引用时才会将自己实例化。
    “代码示例”中的例子就是懒汉式单例类。
    优点:需要使用单例类时才进行实例化,不至于提前占用系统资源。
    缺点:需要考虑多线程访问的安全性问题。为了防止多线程访问时可能导致多个实例被创建,需要对单例实例化之处做双重锁定处理。示例如下:

    public static function getInstance()
    {
    	if(empty(self::$app)) {
    	 	if() {//锁定判断
    			//加锁
    			if(empty(self::$app)) {
    				self::$app = new application();
    			}
    			//释放锁
    	  	}
    	}
        return self::$app;
    }
    

      

      

     

  • 相关阅读:
    在上传文件时限制上传文件的大小,并捕捉超过文件大小限制的
    javascript 获取标签具体位置
    终端服务器超出了最大允许连接数
    常用SQL语句书写技巧
    Javascript实现截图功能(代码)
    JavaScript实现类,有多种方法。
    DBCC CHECKDB 数据库或表修复
    Lucene的例子
    控制同一exe程序打开多次
    IIS6 MMC检测到此管理单元发生一个错误,建议您关闭并重新启动mmc
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9621247.html
Copyright © 2011-2022 走看看