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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alee 中级黑马   /  2014-8-14 12:06  /  1348 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单列模式的实现主要有两种:饿汉式单例类和懒汉式单例类
1)饿汉式单例类
代码清单1:饿汉式单例类
public class EagerSingleton{
private static final EagerSingleton m_instance = new EagerSingleton();
/*** 私有的默认构造子*/
private EagerSingleton() { }
/*** 静态工厂方法*/
public static EagerSingleton getInstance(){  
return m_instance;
}
}
读者可以看出,在这个类被加载时,静态变量m_instance 会被初始化,此时类的私有
构造子会被调用。这时候,单例类的惟一实例就被创建出来了。
Java 语言中单例类的一个最重要的特点是类的构造子是私有的,从而避免外界利用构
造子直接创建出任意多的实例。值得指出的是,由于构造子是私有的,因此,此类不能被
继承。
2)懒汉式单例类。与饿汉式单例类相同之处是,类的构造子是私有的。与饿汉式单例类不同的是,懒汉
式单例类在第一次被引用时将自己实例化。如果加载器是静态的,那么在懒汉式单例类被
加载时不会将自己实例化
代码清单2:懒汉式单例类
package com.javapatterns.singleton.demos;
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;
}
}
读者可能会注意到,在上面给出懒汉式单例类实现里对静态工厂方法使用了同步化,
以处理多线程环境。有些设计师在这里建议使用所谓的“双重检查成例”。必须指出的是,
“双重检查成例”不可以在Java 语言中使用。

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马