浅谈单例模式……

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模式的比较

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值