(设计模式)Singleton和Double-Checked Locking模式
2007-01-20 01:02
393 查看
h1,h2,h3,h4,h5 { font-family:Verdana, Arial; color:#112233; margin:10px 0px; }
p { margin:5px 0px; padding:0px; font-family:Verdana, Arial; font-size:12px;
color:#334455; }
p.pre { line-height:25px; text-indent:24px; }
ul { list-style-position:outside; margin:0px; padding:0px; }
li { list-style-type:square; margin-left:24px; font-size:12px; line-height:20px; }
《设计模式解析》一书中提到的建筑师Christopher Alexander对模式的定义:“在某一背景下某个问题的一种解决方案!”。它说,一个模式的描述应该包括:
模式的名称
模式的目的,即要解决的问题
实现方法
为了实现该模式我们必须考虑的限制和约束因素
模式的目的:保证一个类仅有一个实例,并提供一下访问它的全局访问点。即,希望对象只有一个实例,但没有控制对象实例化的全局对象。还希望确保所有实体使用该对象相同的实例,而无需将引用传给它们。
实现:
添加一个类的私有的静态成员变量,引用所需的对象(初值为null)。
添加一个公共的静态方法,它在成员变量的值为null时实例化这个类(并设置成员变量的值),然后返回该成员变量的值。
将构造方法的状态设置为保护或私有,从而访止任何人直接实例化这个类,绕过静态构造方法机制。
代码示例:项目中,如果有一个系统的工厂类,或者是数据库工厂类,通常这个工厂模式中会用到单件模式(Singleton)
代码一(JAVA - Singleton):单线程
public class SimpleFactory ...{
private static SimpleFactory factory = null;
private SimpleFactory() ...{
}
public static SimpleFactory getInstance() ...{
if(factory == null)
factory = new SimpleFactory();
return factory;
}
}
代码二(JAVA - Singleton):多线程1(设计模式解析中推荐)
public class SimpleFactory ...{
private SimpleFactory() ...{
}
public static SimpleFactory getInstance() ...{
return Factory.factory;
}
/** *//**
* 用类来装载SimpleFactory的唯一的实例
*/
private static class Factory ...{
static final SimpleFactory factory = new SimpleFactory();
}
}
代码三(JAVA - Double-Checked Locking):多线程2
public class SimpleFactory ...{
private static SimpleFactory factory = null;
private SimpleFactory() ...{
}
public static SimpleFactory getInstance() ...{
if (factory == null) ...{
synchronized(this) ...{
if (factory == null) ...{
factory = new SimpleFactory();
}
}
}
return factory;
}
}
调用都是一致的
public static void main(String[] args) ...{
SimpleFactory factory = SimpleFactory.getInstance();
}
p { margin:5px 0px; padding:0px; font-family:Verdana, Arial; font-size:12px;
color:#334455; }
p.pre { line-height:25px; text-indent:24px; }
ul { list-style-position:outside; margin:0px; padding:0px; }
li { list-style-type:square; margin-left:24px; font-size:12px; line-height:20px; }
模式摘要
PS:紫色和蓝色的字为原书的话《设计模式解析》一书中提到的建筑师Christopher Alexander对模式的定义:“在某一背景下某个问题的一种解决方案!”。它说,一个模式的描述应该包括:
模式的名称
模式的目的,即要解决的问题
实现方法
为了实现该模式我们必须考虑的限制和约束因素
Singleton模式和Double-Checked Locking模式
模式的名称:Singleton & Double-Checked Locking模式的目的:保证一个类仅有一个实例,并提供一下访问它的全局访问点。即,希望对象只有一个实例,但没有控制对象实例化的全局对象。还希望确保所有实体使用该对象相同的实例,而无需将引用传给它们。
实现:
添加一个类的私有的静态成员变量,引用所需的对象(初值为null)。
添加一个公共的静态方法,它在成员变量的值为null时实例化这个类(并设置成员变量的值),然后返回该成员变量的值。
将构造方法的状态设置为保护或私有,从而访止任何人直接实例化这个类,绕过静态构造方法机制。
代码示例:项目中,如果有一个系统的工厂类,或者是数据库工厂类,通常这个工厂模式中会用到单件模式(Singleton)
代码一(JAVA - Singleton):单线程
public class SimpleFactory ...{
private static SimpleFactory factory = null;
private SimpleFactory() ...{
}
public static SimpleFactory getInstance() ...{
if(factory == null)
factory = new SimpleFactory();
return factory;
}
}
代码二(JAVA - Singleton):多线程1(设计模式解析中推荐)
public class SimpleFactory ...{
private SimpleFactory() ...{
}
public static SimpleFactory getInstance() ...{
return Factory.factory;
}
/** *//**
* 用类来装载SimpleFactory的唯一的实例
*/
private static class Factory ...{
static final SimpleFactory factory = new SimpleFactory();
}
}
代码三(JAVA - Double-Checked Locking):多线程2
public class SimpleFactory ...{
private static SimpleFactory factory = null;
private SimpleFactory() ...{
}
public static SimpleFactory getInstance() ...{
if (factory == null) ...{
synchronized(this) ...{
if (factory == null) ...{
factory = new SimpleFactory();
}
}
}
return factory;
}
}
调用都是一致的
public static void main(String[] args) ...{
SimpleFactory factory = SimpleFactory.getInstance();
}
相关文章推荐
- [zt]Singleton和Double-Checked Locking设计模式—UML图及代码实现
- Design Pattern_Singleton(单件模式)和Double-Checked Locking(双重检查锁定)
- Java设计模式之单例模式 double---checked----locking双重检查锁定
- Singleton(单例)模式和Double-Checked Locking(双重检查锁定)模式
- c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking)
- java设计模式进阶_double-checked-locking
- 经典j2ee设计模式Double-Checked Locking失效问题
- Singleton 单件模式及其变体 Double-Checked Locking 双重检查锁模式
- Singleton 单件模式及其变体 Double-Checked Locking 双重检查锁模式
- Singleton - 单例模式和Double-Checked Locking - 双重检查锁定模式
- Singleton pattern and problem with double checked locking
- 单例模式与双重检测(Double-Checked Locking, DCL)
- Double Checked Locking 模式
- 【转】Java中的模式 --单态 (部分翻译 double-checked locking break)
- 单例解析-Double-checked locking and the Singleton pattern
- Java多线程 -- 单例模式的Double-checked Locking (DCL)问题
- 双重检查锁定(double-checked locking)与单例模式
- Double-checked locking and the Singleton pattern
- Double-checked locking and the Singleton pattern
- Java中的模式 --单态-多线程下的处理方式(部分翻译 double-checked locking break)