单例模式(Singleton)
1.什么是单例模式
在现实生活中存在着有这样的特点的一些类:
- A.这些类只能有一个实例;
- B.这些能够自动实例化;
- C.这个类对整个系统可见,即必须向整个系统提供这个实例。
也许有些人看不懂,下面举个具体的单例模式的例子:
比如教室里面的教师和学生都是需要在黑板上写字的,但是一般的情况下,教室里面应该只有一个黑板吧,它是教师和学生公用滴。这时就要想办法保证取得的黑板是一个共享的唯一的对象。而单例模式就是解决这类问题的一个已经成型的模式。
2.如何实现单例模式
单例模式的实现通常有两种方式:“饿汉式”和“懒汉式”。
- 饿汉式:java实现代码如下:
/*
* 饿汉式
*/
Public class Singleton{
Private static final Singleton singleton = new Singleton();
Private Singleton(){}; //私有构造函数
Public static Singleton getInstance(){
Return singleton;
}
}
采用懒汉式方法实现单例模式的方法是在类的内部实例化一个静态变量singleton,这是比较好理解的,满足上面的A,B,C三个特点。还有一点要注意的哦,那就是该类的构造方法是私有的。这样类就不提供默认的构造函数了,所以也就不可以实例化了。
- 懒汉式:java实现代码如下:
/*
* 懒汉式,线程不安全,在多线程不能正常工作!
*/
public class Singleton {
private static Singleton instance;
private Singleton (){} //私有构造函数
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
/*
* 懒汉式,线程安全,DCL双重检查模式
*/
public class Singleton {
private static Singleton instance;
private Singleton (){} //私有构造函数
public static synchronized Singleton getInstance() {
if(singleton == null){
Synchronized(singleton.class){
If(singleton == null){
Singleton = new Singleton();
}
}
}
return instance;
}
}
懒汉式通过一个类的静态变量实现的,但是并没有直接初始化。而是在函数getInstance()中实例化的,也就是每次想用这个实例的时候初始化的,如果已经初始化了,那么就不用初始化了,这样也很好啊,对的,其实懒汉式是比较常用的实现方式。
3.单例模式的使用
Singleton mSingleton = Singleton.getInstance();
网友评论