“Head First 设计模式“ :单例模式
发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。类图如下:代码实现如下:public class Singleton { // 用静态变量来记录唯一的实例 privat
千家信息网最后更新 2024年11月12日“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安全错误
数据库的锁怎样保障安全
二零网络技术工作室
金蝶 vb 连接数据库
燕尾服务器三个数
数据库和表VFP
东西湖网络安全学院招聘
达梦数据库schema备份
多个网站可以共用一台服务器吗
服务器主板插内存
北京惠普服务器虚拟化哪家便宜
eve 服务器时间
东享日记网络技术科技有限公司
腾讯的软件开发实力
湖北数据软件开发设施参考价格
疫情期间同上网络安全
四川计算机软件开发哪家实惠
数据库安全管理常用方法
游戏软件开发的好找工作么
软件开发企业具体业务
查看数据库定义
证券公司 服务器
软件开发一个月能赚多少
网络安全 美亚柏科
模具和计算机网络技术哪个好
服务器上传数据速度
张家港信息化网络技术费用是多少
软件开发企业具体业务
部分员工网络安全意识不足
数据库安全防范方法
我的世界服务器攻打指令
软件开发数据库分几种