Java 设计模式——单例模式
一、单例模式有以下三个特点
1)单例类在整个系统中只能有一个实例
2)单例类必须自己创建自己的实例
3)单例类必须系统中其他对象提供这个实例
二、单例模式两种类型
(1)饿汉式
先初始化对象;
类一加载就存在;
Single 类一进内存,就已经创建好对象。
(2)懒汉式
对象是方法被调用时才初始化,也叫做对象的延时加载;
类一加载就为 null(调用方法的时候才在内存中建立对象);
Single类进内存,对象还没有存在,只有调用方法时才建立对象。
单例模式的好处就是:类只实例化一次,省资源,节省开销,提高速度
三、单例模式具体实现
(1)饿汉式,在类被加载时,静态变量m_instance会被初始化,此时类的私有构造子会被调用。
SingletonOne.java
packagedesignpattern.singleton;
public class SingletonOne {
//Create instance when the class load.
private static final SingletonOnem_instance = new SingletonOne();
//此处写成私有方法可以防止用户在外面用new方法来产生。
private SingletonOne(){}
public synchronized static SingletonOne getInstance(){
return m_instance;
}
}
(2)懒汉式,在下面给出懒汉式单例类实现里对静态工厂方法使用了同步化,以处理多线程环境
SingletonTwo.java
packagedesignpattern.singleton;
public class SingletonTwo {
private static SingletonTwo m_getInstance = null;
//此处写成私有方法可以防止用户在外面用new方法来产生。
private SingletonTwo(){
}
//synchronized可以保证线程安全
public synchronized staticSingletonTwo getInstance(){
//When invoke theinstance then create instance.
if (m_getInstance ==null){
m_getInstance= new SingletonTwo();
}
returnm_getInstance;
}
}