單例模式

转载 2012年03月21日 11:10:48
 

 一、什么是单例模式:
单例模式确保某一个类只有一个实例,而且向这个系统提供这个实例。
二、单例模式的要点:
    1、某个类只能有一个实例
    2、它必须自行创建这个实例
    3、必须自行向这个系统提供这个实例
三、单例模式的结构及实现:
1、饿汉式单例类:
类图:

代码:
public class EagerSingleton
{
private static final EagerSingleton m_instance = new EagerSingleton();
private EagerSingleton()
{
}
public static EagerSingleton getInstance()
{
return m_instance;
}
}
当类被加载的时候,static 类型的m_instance就会被實例化,保证的單例模式的自动创建条件,他是常量,保证了值不变,即保证了对象的唯一;事例的创建调用了私有的构造方法,构造方法私有保证了外界不能直接调用。
2、懒汉式单利类:
类图:
代码:
public class LazySingleton
{
private static LazySingleton m_instance = null;
private LazySingleton()
{
}
synchronized public static LazySingleton getInstance()
{
if(m_instance == null)
{
m_instance = new LazySingleton();
}
return m_instance;
}
}
3、注册式单例类
类图
代码
import java.util.HashMap;
public class RegSingleton
{
static private HashMap m_registy = new HashMap();

static
{
RegSingleton sl = new RegSingleton();

m_registy.put(sl.getClass().getName , x);
}

protected RegSingleton()
{

}

public static RegSingleton getInstance(String name)
{
if(name==null)
{
name = "easyworld.pattern.RegSingleton";
}
}
if(m_registy.get(name)==null)
{
try
{
m_registy.put(name,Class.forName(name).newInstance());
}
catch (Exception e)
{
System.out.println("Erorr");
}
}
return (RegSingleton)(m_registry.get(name));

}

 

在多线程环境下使用单例模式时,要考虑到加锁,要保证一个线程进入代码的临界区时,另一个线程不进入临界区。也可以使用双重锁定的方式,先判断该实例是否为null,如果为null,则加锁后再次判断是否为null,如果为null,则创建实例。同时,也可以采用将该实例声明为静态成员,也可以解决线程安全的问题。

单例模式java代码

  • 2017年12月04日 19:46
  • 32KB
  • 下载

多种单例模式

  • 2017年11月30日 19:05
  • 3KB
  • 下载

Unity 单例模式总结

单例模式,简单说就是类的实例在内存中只存在一份单例模式有时又叫单态模式或者原子模式,不管名称怎么叫,表达的意思是一样的总结起来有二种:第一种: 写一个脚本,然后将这个脚本拖放到场景中某个对象身上,千...

单例模式

  • 2015年06月24日 10:08
  • 21KB
  • 下载

Android线程池+单例模式+webService

  • 2017年11月01日 10:36
  • 50.14MB
  • 下载

自定义toast你需要的都在这里,单例模式,自定义布局,完全自定义,可拖动的悬浮窗

1.单例的toast 参考:Android 特殊的单例Toast(防止重复显示) public class MyToast { /** 之前显示的内容 */ pri...

单例模式

  • 2013年11月14日 14:44
  • 24KB
  • 下载

单例模式详解

  • 2014年06月06日 00:14
  • 25KB
  • 下载

使用模板实现单例模式(线程安全)

很多我们经常用的方案其实不能完美适应多线程程序,主要原因是一些看似原子的操作其实并非原子操作,而是被分解成多个步骤,于是在多线程环境中就会出现问题。 #include #include //cl...

单例模式学习

  • 2013年01月06日 15:20
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:單例模式
举报原因:
原因补充:

(最多只允许输入30个字)