A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵文杰 山林野马   /  2012-5-13 08:55  /  2042 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                  单例设计模式有哪两种?有一种是线程不安全,在开发中常用吗?

5 个回复

倒序浏览
在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对象
回复 使用道具 举报
单例有两种:一种是懒汉式(面试时必考),一种是恶汉式,(开发中常用)
回复 使用道具 举报
懒汉式线程不安全,开发不常用
回复 使用道具 举报
                    嗯,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马