博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式--单例模式
阅读量:5251 次
发布时间:2019-06-14

本文共 1841 字,大约阅读时间需要 6 分钟。

设计模式

1. 单例模式:饱汉、饿汉。以及饿汉中的延迟加载,双重检查

单例模式

分类:懒汉式单例、饿汉式单例、登记式单例

特点:

  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例

应用场景:线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例

懒汉式,线程不安全  1 public class Singleton { 2     private static Singleton instance; 3     private Singleton (){} 4  5     public static Singleton getInstance() { 6      if (instance == null) { 7          instance = new Singleton(); 8      } 9      return instance;10     }11 }懒汉式,线程安全,不高效13 public static synchronized Singleton getInstance() {14     if (instance == null) {15         instance = new Singleton();16     }17     return instance;18 }

双重检查锁模式

1 public class Singleton { 2     private volatile static Singleton instance; //声明成 volatile 3     private Singleton (){} 4  5     public static Singleton getSingleton() { 6         if (instance == null) {                          7             synchronized (Singleton.class) { 8                 if (instance == null) {        9                     instance = new Singleton();10                 }11             }12         }13         return instance;14     }15    16 }

饿汉式

1 public class Singleton{ 2     //类加载时就初始化 3     private static final Singleton instance = new Singleton(); 4      5     private Singleton(){} 6  7     public static Singleton getInstance(){ 8         return instance; 9     }10 }

静态内部类的写法(推荐)懒汉式

1 public class Singleton {  2     private static class SingletonHolder {  3         private static final Singleton INSTANCE = new Singleton();  4     }  5     private Singleton (){}  6     public static final Singleton getInstance() {  7         return SingletonHolder.INSTANCE; 8     }  9 }

Singleton通过将构造方法限定为private避免了类在外部被实例化

完美的解释http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/

 

转载于:https://www.cnblogs.com/wangwanchao/p/5252359.html

你可能感兴趣的文章
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
CentOS 简单命令
查看>>
使用 SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>