设计模式之创建模式之单例模式
一、单例模式(Singleton)
1,UML图
略了
2, 模式说明
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并且向整个系统提供这个实例。这个类称为单例类。
单例模式的要点有三个:
一是某个类只能有一个实例;
二是它必须自行创建这个事例;
三是它必须自行向整个系统提供这个实例。
3,模式示例代码
package com.maohao.build.singleton; public class HundrySingleton {private HundrySingleton(){};private static final HundrySingleton new_instance = new HundrySingleton();public static HundrySingleton getSingleInstance() {return new_instance;} }饿汉式单例类:这个类被加载时,静态变量会被初始化,此时类的私有构造子会被调用。这个时个,单例类的惟一实例就被创建出来了。Java语言中单例类的一个最重要的特点是类的构造子是私有的,从而避免外界利用构造子直接创建出任意多的实例。值得指出的是构造子是私有的,因此此类不需要被被继承。
package com.maohao.build.singleton; public class LazySingleton {private LazySingleton(){};private static LazySingleton new_instance;public static synchronized LazySingleton getSingletonInstance() {if(new_instance == null) {new_instance = new LazySingleton();}return new_instance;} }懒汉式单例类:与饿汉式单例类相同之处是,类的构造子是私有的。与饿汉式单例类不同的是,懒汉式单例类在第一次被引用时将自己实例化。如果加载器是静态的,那么在懒汉式单例类被加载时不会将自己实例化。
4,模式使用场景
在一个系统要求一个类只有一个实例时才应当使用单例模式。
5,模式应用
java.lang.Runtime
6,特别说明
关于单例模式的双重检查锁,由于JMM的机制决定了双重检查锁在Java语言下是失效的,因此Java语言下直接锁住方法即可。具体解释如下:http://allenlly.iteye.com/blog/984106。