什么是单例设计模式?
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
对应我这个初学来说,感受最深的是学习Android时,一些的对象的获取是通过getxxxx方法来获得的,而不是通过new出来,可能就是这个设计思想吧。
目标:使得一个类只能创建一个对象
实现方式有很多
1、饿汉式
package com.jiang.test;
//饿汉式
public class Singleton {
public static void main(String[] args) {
Singletontest1 temp1 = Singletontest1.getInstance();
Singletontest1 temp2 = Singletontest1.getInstance();
System.out.println(temp1 == temp2);
}
}
class Singletontest1 {
//私有化构造器
private Singletontest1() {
}
//创建一个类的实例,静态私有的
private static Singletontest1 instance = new Singletontest1();
//创建一个静态公开的方法,返回instance
public static Singletontest1 getInstance() {
return instance;
}
}
2、DCL双检查锁机制 (此方法最优,是懒汉式的优化,懒汉式在多线程时可能会有安全性问题 故没有列出)
public class Singleton {
// 将自身实例化对象设置为一个属性,并用static修饰
private static Singleton instance;
// 构造方法私有化
private Singleton() {}
// 静态方法返回该实例
public static Singleton getInstance() {
// 第一次检查instance是否被实例化出来,如果没有进入if块
if(instance == null) {
synchronized (Singleton.class) {
// 某个线程取得了类锁,实例化对象前第二次检查instance是否已经被实例化出来,如果没有,才最终实例出对象
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}