23种设计模式之单例模式
定义
确保某一个类只有一个实例,并且自行实例化,向整个系统提供这个唯一实例
五种单例模式
1.饿汉式
/**
* gengwei 饿汉式
*/
public class StarvingSingletion {private static final StarvingSingletion mInstance = new StarvingSingletion();
private StarvingSingletion(){}public static StarvingSingletion getInstance(){
return mInstance;
}public void printLog(String log){
Log.e("gengwei",":"+log);
}
}
使用方式
StarvingSingletion starvingSingletion = StarvingSingletion.getInstance();
starvingSingletion.printLog("饿汉式");
2.懒汉式
/**
* gengwei 懒汉式
*/
public class SlackerSingletion {
private static SlackerSingletion mInstance;
private SlackerSingletion(){}/**
* gengwei synchronized线程安全,保证多线程情况下单例的唯一性
* @return
*/
public static synchronized SlackerSingletion getInstance(){
if (mInstance == null) {
mInstance = new SlackerSingletion();
}
return mInstance;
}public void printLog(String log){
Log.e("gengwei",":"+log);
}
}
3.双重锁校验机制
/**
* gengwei 双重校验机制
*/
public class DoubleChackSingletion {
/**
* volatile 是为了防止乱序执行导致双重校验机制失效
*/
private volatile static DoubleChackSingletion mInstance;
private DoubleChackSingletion(){}public static DoubleChackSingletion getInstance(){
if (mInstance == null){
synchronized (DoubleChackSingletion.class) {
if (mInstance == null) {
mInstance = new DoubleChackSingletion();
}
}
}
return mInstance;
}public void printLog(String log){
Log.e("gengwei",":"+log);
}
}
4.静态内部类
/**
* gengwei
* 静态内部类方式
*/
public class InternalClassSingletion {
private InternalClassSingletion(){}public static InternalClassSingletion getInstance(){
return InternalClassSingletionHolder.instance;
}private static class InternalClassSingletionHolder {
private static final InternalClassSingletion instance = new InternalClassSingletion();
}public void printLog(String log){
Log.e("gengwei",":"+log);
}
}
5.枚举
public enum EmumSingletion {
INSTANCE;
public void printLog(String log){
Log.e("gengwei",":"+log);
}
}
【23种设计模式之单例模式】推荐使用双重校验和静态内部类的方式
推荐阅读
- 设计模式-代理模式-Proxy
- 设计模式【15】--从审批流中学习责任链模式
- 2020-11-18迭代器设计模式
- 设计模式(6)|设计模式(6) : 原型模式
- 8发布-订阅模式
- 设计模式【14】-- 从智能音箱中学习命令模式
- 设计模式——工厂方法模式(创建型模式)
- java|设计模式——创建型——工厂方法(Factory Method)
- 设计模式|设计模式_创建型模式——工厂方法
- 设计模式|设计模式——创建型软件设计模式——工厂方法模式