“Head First 设计模式“ :单例模式
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。类图如下:代码实现如下:public class Singleton { // 用静态变量来记录唯一的实例 privat
千家信息网最后更新 2024年11月30日“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安全错误
数据库的锁怎样保障安全
xbox服务器连接已阻止解决方法
山东弘度互联网科技官网
类似服务器的游戏软件
新浪微博服务器错误
遥感数据库构建结构
电商供应链软件开发
网络技术公司的财务工作
泰拉瑞亚1.4服务器全物品推荐
战争雷霆手游服务器更新
软件开发企业实战项目
一次请求访问几次数据库
美国火眼系统网络安全防护
手机自建数据库
蓝牙外设连接服务器怎么通信
我的世界服务器动态贴图插件
吉林省广通网络技术开发
阿里云数据库rds
mysql数据库安全方法
华为云服务器手机客户端下载
建设工程行业软件开发
云服务器的防护软件
互联网科技实验室
cf现在是用多少tick服务器
网络安全周在什么地方召开
ibm服务器带外管理地址
衡水人社局网络安全培训
国内外数据库软件市场规模
cs 躲猫猫服务器
oa里面提示文件不是数据库
如何做好网络安全工作心得