单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个
方面的作用:
1
、控制资源的使用,通过线程同步来控制资源的并发访问;
2
、控制实例产生的数量,达到节约资源的目的。
3
、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不
相关的两个线程或者进程之间实现通信。
单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1
、单例类只能有一个实例。
2
、单例类必须自己创建自己的唯一实例。
3
、单例类必须给所有其他对象提供这一实例。
一、懒汉式单例
在类被加载的时候,唯一实例已经被创建。这个设计模式在
Java
中容易实现,在别的语言
中难以实现。
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2007-9-11
* Time: 14:57:08
* <>
单例模式
-
懒汉式单例
*/
public class LazySingleton {
/**
*
私有静态对象
,
加载时候不做初始化
*/
private static LazySingleton m_intance=null;
/**
*
私有构造方法
,
避免外部创建实例
*/
private LazySingleton(){
}
/**
*
静态工厂方法
,
返回此类的唯一实例
.
*
当发现实例没有初始化的时候
,
才初始化
.
* @return LazySingleton
*/
synchronized public static LazySingleton getInstance(){
if(m_intance==null){
m_intance=new LazySingleton();
}
return m_intance;
}
}
二、饿汉式单例
在类加载的时候不创建单例实例。
只有在第一次请求实例的时候的时候创建,
并且只在第一
次创建后,以后不再创建该类的实例。
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2007-9-11
* Time: 14:45:25
* <>
单例模式
-
饿汉式单例
*/
public class EagerSingleton {
/**
*
私有的
(private)
唯一
(static final)
实例成员
,
在类加载的时候就创建好了单例对象
*/
private static final EagerSingleton m_instance = new EagerSingleton();
/**
*
私有构造方法
,
避免外部创建实例
*/
private EagerSingleton() {
}
/**
*
静态工厂方法
,
返回此类的唯一实例
.
* @return EagerSingleton
*/
public static EagerSingleton getInstance() {
return m_instance;
}
}
|
|