首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Java与形式之单例(Singleton)模式

2012-11-26 
Java与模式之单例(Singleton)模式? ? 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供

Java与模式之单例(Singleton)模式

? ? 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

饿汉式单例类

?

public class EagerSingleton{    private static final EagerSingleton m_instance =         new EagerSingleton();    /**    * 私有的默认构造子    */    private EagerSingleton(){}     /**    * 静态工厂方法    */    public static EagerSingleton getInstance()    {         return m_instance;    }}

?

? ? 当类被加载时,静态变量m_instance会被初始化,此时类的私有构造子会被调用。

懒汉式单例类

public class LazySingleton{    private static LazySingleton m_instance;   /**    * 私有的默认构造子,保证外界无法直接实例化    */   private LazySingleton(){}   /**    * 静态工厂方法,返回此类的唯一实例    */   synchronized public static LazySingleton         getInstance(){        if(m_instance == null){             m_instance = new LazySingleton();       }        return m_instance;    }}

? ? 与饿汉式单例类不同的是,懒汉式单例在第一次被调用时才初始化自己。在懒汉式实现里对静态工厂方法使用了同步化(synchronized 关键字)以处理多线程环境。

? ? 单从资源利用率角度来看,懒汉式稍微好一些;从速度和反映时间角度来看,饿汉式要好一些。

? ? 饿汗式单例类可以在java语言内实现,但不易在c++内实现,因为静态初始化在c++里没有固定的顺序,即静态变量m_instance变量的初始化与类的加载顺序没有保证,可能会出问题。这就是为什么在GoF提出单例的概念时,举的例子是懒汉式。实际上本书认为饿汗式单例类更符合java语言本身的特点。

?

?

?

参考:《Java与模式》

?

热点排行