“Head First 设计模式“ :单例模式
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。类图如下:代码实现如下:public class Singleton { // 用静态变量来记录唯一的实例 privat
千家信息网最后更新 2025年01月23日“Head First 设计模式“ :单例模式
单例模式
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。类图如下:
代码实现如下:
public class Singleton { // 用静态变量来记录唯一的实例 private static Singleton instance; /** * 构造方法私有化,防止被创建,只能类内部能使用构造器 */ private Singleton() { } /** * 实例化对象,并返回这个对象 * @return */ public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } // 其他的方法}
并发环境下上面的代码会出现问题的,我们进一步修改,如下:
/** * 实例化对象,并返回这个对象 * synchronized加锁,可能对性能有影响哦 * @return */public static synchronized SingletonThread getInstance() { if (instance == null) { instance = new SingletonThread(); } return instance;}
上面例子对性能很大的影响,那我们可以进一步改善吗?
- 如果getInstance()的性能对应用程序不是很关键,就什么都别做,不要改善了
- 使用"急切"创建实例,而不用延迟实例化的做法,代码如下:
public class Singleton3 { // 静态属性,类加载时初始化的,JVM保证唯一 private static Singleton3 instance = new Singleton3(); private Singleton3() { } public static Singleton3 getInstance() { return instance; }}
- 使用"双重检查加锁",在getInstance()中减少使用同步,不适合JDK1.4之前的版本,代码如下;
public class Singleton4 { // 用静态变量来记录唯一的实例, volatile多线程环境下保用最新的值 private volatile static Singleton4 instance; /** * 构造方法私有化,防止被创建,只能类内部能使用构造器 */ private Singleton4() { } /** * 实例化对象,并返回这个对象 * @return */ public static Singleton4 getInstance() { if (instance == null) { synchronized (Singleton4.class) { if (instance == null) { instance = new Singleton4(); } } } return instance; } // 其他的方法}
注意:有多个类加载器时,单利可能产生多个哦,这个要注意哦。
单例模式的应用场景:
- 应用中某个实例对象需要频繁的被访问。
- 应用中每次启动只会存在一个实例。如账号系统,数据库系统。
实例
对象
代码
方法
应用
性能
静态
模式
变量
多个
环境
系统
构造器
进一
保证
影响
私有
很大
频繁
急切
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发多久可以拿一万
给多米诺邮件服务器发邮件速度慢
软件开发项目成本和利润的
网络安全木桶原理是指
系统软件开发管理红线
广东华为数据库有限公司
江苏机电软件开发配置
金融机构网络安全知识竞答
邮件服务器安全性
我的世界基岩版服务器刷物品教程
oracle数据库索引
济南银丰集团软件开发怎么样
crm数据库如何做
数据库管理系统Word报告
数据库并发控制用到的主要技术
计算机网络技术考研要多少分
球探体育足球数据库
深圳二当家网络技术有限公司
新开公司建立数据库
番茄科技是互联网吗
关于大数据库的论文
酷盾网络安全学院靠谱吗
网络安全论文摘要怎么写
sqlite轻量级数据库
百度无法与服务器安全连接
对数据库sql实验的总结
江苏企媒媒网络技术有限公司
杭州软件开发培训好吗
从网络安全的层面上讲
服务器安全高人