黑马程序员技术交流社区

标题: 单例设计模式有哪两种? [打印本页]

作者: 赵文杰    时间: 2012-5-13 08:55
标题: 单例设计模式有哪两种?
                  单例设计模式有哪两种?有一种是线程不安全,在开发中常用吗?
作者: 康大玮    时间: 2012-5-13 09:40
在Java 的单例模式中,有两种实现方式,懒汉式与饿汉式。

|-单例类Songleton /**
* 单例模式实现之一饿汉式
*
* 一开始就创建Singleton的对象并实例化
*
*/
class Singleton
{
// 创建一个Signleton实例对象,用来存储创建好的实例
private static Singleton singleton = new Singleton();
// 将构造方法进行私有化
private Singleton()
{
// 待执行代码
}
// 获取Sington实例对象
public static Singleton getInstance()
{
// 返回实例对象
return singleton;
}
}复制代码|-测试类 public class SingletonDemo
{
public static void main(String[] args)
{
// 创建Singleton实例对象
Singleton singleton01 = Singleton.getInstance();
Singleton singleton02 = Singleton.getInstance();
// 判断两个实例对象是否是同一个
if (singleton01 == singleton02)
{
//相同打印"The Same Object!"
System.out.println("The Same Object!");
}
else
{
//不相同打印"The DifferentObject!"
System.out.println("The Different Object!");
}
}
}复制代码|-测试结果 The Same Object!复制代码从测试的结果可以看出,获得Singleton对象是同一对象。

单例模式实现之懒汉式
|-单例类Songleton /**
* 单例模式实现之一懒汉式
*
* 当需要实例对象的时候再去生成对象进行实例化
*
*/
class Singleton
{
// 声明一个Signleton变量,用来存储创建好的实例
private static Singleton singleton = null;
// 将构造方法进行私有化
private Singleton()
{
// 待执行代码
}
// 获取Sington实例对象
public static Singleton getInstance()
{
// 判断singleton 是否为null,是的话实例化
if (null == singleton)
{
singleton = new Singleton();
}
// 返回实例对象
return singleton;
}
}复制代码|-测试类与测试结果 和上面单例模式实现之饿汉式的一样,达到了生成同一个Singleton的
对象。

以上两种实现方式均单线程的情况下,但是在多线程的情况下,懒汉式就可能生成不止
一个Singleton对象
作者: ^.^晴天    时间: 2012-5-13 22:25
单例有两种:一种是懒汉式(面试时必考),一种是恶汉式,(开发中常用)
作者: ^.^晴天    时间: 2012-5-13 22:31
懒汉式线程不安全,开发不常用
作者: 赵文杰    时间: 2012-5-13 22:49
                    嗯,谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2