單例模式
来源:互联网 发布:linux关机的命令 编辑:程序博客网 时间:2024/05/16 12:02
一、什么是单例模式:
单例模式确保某一个类只有一个实例,而且向这个系统提供这个实例。
二、单例模式的要点:
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模式:单例模式、工厂模式、Builder模式
- 设计模式【工厂模式】【单例模式】【装饰者模式】
- 设计模式(单例模式,工厂模式,适配器模式)
- 单例模式、工厂模式、抽象模式、模板方法模式
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 获取SQL Server 数据库中Session的值
- js正则标志/g /i /m的用法,以及实例
- 架构那点事系列一 - 设计模式前章
- Spring remoting简单例子
- Digital Library
- 單例模式
- 在Web.config中配置数据库连接(利用抽象工厂方便更换数据库)
- Unity指向连接网址
- LDD3 读书笔记之 第 5 章 并发和竞争情况
- 新建对象:反射会调用构造函数,clone不会调用构造函数
- 对数组进行选择排序
- 深入理解php内核 编写扩展 I:介绍PHP和Zend
- win7和win8双系统安装教程
- 删除MS-DOS无效的文件夹