浅谈单例模式……

来源:互联网 发布:mac小游戏 知乎 编辑:程序博客网 时间:2024/06/10 03:39

java模式之单例模式:
          单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
       1,一个类只能有一个实例
       2,自己创建这个实例
       3,整个系统都要使用这个实例

 

懒汉式单例模式

 

 /// <summary>
 
/// 懒汉式单例模式,在第一次被引用时开始实例化
 
/// </summary>

package zl.biz.impl;
import java.io.*;
import java.util.Properties;

/**
 * 懒汉式单例模式
 * @author aptech
 *
 */
public class Env extends Properties{
 private static Env env=null;
 
 /**
  * 构造方法
  */

 private Env()
 {
  InputStream is=getClass().getResourceAsStream("/db.properties");// 读取配置数据库连接池文件
  try {
   load(is);
  } catch (IOException e) {
   // TODO 自动生成 catch 块

   System.err.println("错误:没有读属性文件"+"请确认db.properties文件是否存在");
  }
 }
 
 /**
  * 同步同一个时间,只能被一个人调用(线程等待,防止同时访问时的误差)
    */

 public synchronized  static  void getInsEnv() {
  if(env==null)
  {
   env=new Env();
  }
 }
 /**
  * @return 返回单例模式的实例
  */

 public static Env getEnv()
 {
  if(env!=null)
  {
   return env;
  }else
  {
   getInsEnv();//调用同步
   return env;
  }
 }
}

 

 

 

 

 

 

 

using System.Collections.Generic;
using System.Text;

namespace OODemo
{
    
/// <summary>
    
/// 饿汉式单例模式,在第一次加载时就实例化
    
/// </summary>
    public class Singleton
    {
        
        
private static readonly Singleton instance=new Singleton();
        
private Singleton()
        {
            
        }
        
public static Singleton GetInstance()
        {
            
return instance;
        }


    }

    
/// <summary>
   

 

3、登记式单例模式
import java.util.HashMap;
public class RegSingleton
{
static private HashMap m_registry = new HashMap();
static
{
RegSingleton x = new regSingleton();
m_registry.put(x.getClass().getName(), x);
}
protect RegSingleton(){}
static public RegSingleton getInstance(String name)
{
if(name == null )
{
name = "RegSingleton";
}
if(m_registry.get(name ) == null )
{
m_registry.put(name, Class.forName(name).newInstance();
}
catch(Exception e)
{
System.out.println("Error happened.");
}
return (RegSingleton)(m_registry.get(name));
}
}

三种Singleton模式的比较

饿汉式 类被加载时就被实例化。
懒汉式 类加载时,不被实例化,在第一次引用时实例化。

饿汉式、懒汉式都不能被继承
而登记式可以被继承。

原创粉丝点击