单例模式–饿汉模式
/**
* 单例模式Singleton
* 应用场合:有些对象只需要一个就够了,比如:古代的皇帝、现在中国的妻子
* 作用:保证整个应用程序中某个实例有且只有一个即可
* 类型:饿汉模式、懒汉模式
* @author ZHAYUYAO
* 2018年1月19日
* 此处演示的饿汉模式(类加载的时候就创建对象)
*/
public class Singleton {
private Singleton() {
}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
单例模式–懒汉模式
/**
* 单例模式--懒汉模式(获取对象的时候再去创建对象)
* @author ZHAYUYAO
* 2018年1月19日
*/
public class Singleton2 {
private Singleton2() {
}
private static Singleton2 instantce;
public static Singleton2 getInstance(){
if (instantce == null) {
instantce = new Singleton2();
}
return instantce;
}
}
验证类:
public class SingletonTest {
public static void main(String[] arg) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2) {
System.out.println("s1和s2是一个实例");
} else {
System.out.println("s1和s2不是一个实例");
}
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
if (s3 == s4) {
System.out.println("s3和s4是一个实例");
} else {
System.out.println("s3和s4是一个实例");
}
}
}
结果:
s1和s2是一个实例
s3和s4是一个实例
区别:
饿汉模式,类加载的时候比较慢,但是运行时获取对象的速度比较快,线程安全。
懒汉模式,类加载的时候比较快,但是运行时获取对象的速度比较慢,线程不安全。