單例模式

转载 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,则创建实例。同时,也可以采用将该实例声明为静态成员,也可以解决线程安全的问题。

相关文章推荐

单例模式

  • 2015-06-24 10:08
  • 21KB
  • 下载

单例模式

  • 2013-11-14 14:44
  • 24KB
  • 下载

剑指offer-面试题2 实现单例模式

我也不知道面试题1去哪儿了。。面试题2.实现单例模式1. 单例模式的定义  单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中只有类的实例的唯一性。单例模式最初的定义出现于《设计模式》(艾迪...

单例模式详解

  • 2014-06-06 00:14
  • 25KB
  • 下载

单例模式学习

单例模式

设计模式是代码总结的经验,用来解决一类问题。 单例类有两个特点: 保证全局只有一个唯一实例提供了方便获取唯一实例的接口 单例模式又分为懒汉模式和饿汉模式:(一般用在高并发环境下,所以保证线程...

耦合和单例模式的理解

  • 2014-08-18 09:28
  • 21KB
  • 下载

java单例模式

几种线程安全的单例模式

几种线程安全的单例模式:饿汉式、优化的懒汉式、双重检验锁、静态内部类

第9章_单例模式

  • 2012-09-27 10:23
  • 698KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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