单例模式的创建方法
1.懒汉模式
package com.example.demo;
/**
* Created by Administrator on 2020/7/4.
* 单例模式之懒汉模式
*/
public class SingletonDemo {
private SingletonDemo singletonDemo=null;
private SingletonDemo() {
}
public static SingletonDemo getInstance() {
if (singletonDemo == null) {
singletonDemo = new SingletonDemo();
}
return singletonDemo;
}
}
懒汉模式在需要时才进行创建,如果有则返回,没有则新建。有线程安全和线程不安全两种写法,区别就是synchronized关键字。
2.饿汉模式
package com.example.demo;
/**
* Created by Administrator on 2020/7/4.
* 单例模式之饿汉模式
*/
public class SingletonDemo {
private static SingletonDemo singletonDemo=new SingletonDemo();
private SingletonDemo() {
}
public static SingletonDemo getInstance() {
return singletonDemo;
}
}
饿汉模式在实例化是就已经创建好。好处是没有线程安全的问题,坏处是浪费内存空间。
这是单例模式最经典的两种创建方法,还有其他的两种创建方式,分别为:
3.双捡锁模式
package com.example.demo;
/**
* Created by Administrator on 2020/7/4.
* 单例模式之双捡锁模式
*/
public class SingletonDemo {
private static SingletonDemo singletonDemo==null;
private SingletonDemo() {
}
public static SingletonDemo getInstance() {
if (singletonDemo == null) {
synchronized (SingletonDemo.class){
if (singletonDemo == null) {
singletonDemo = new SingletonDemo();
}
}
}
return singletonDemo;
}
}
4.静态内部类模式
package com.example.demo;
/**
* Created by Administrator on 2020/7/4.
* 单例模式之静态内部类模式
*/
public class SingletonDemo {
private static class SingletonStaticDemo {
private static final SingletonDemo Instance = new SingletonDemo();
}
private SingletonDemo() {
}
public static final SingletonDemo getInstance() {
return SingletonStaticDemo.Instance;
}
}