java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...
设计模式:
是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱 俗称”套路“
单例模式
所谓类的单例模式 就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象 我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类的内部仍然可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法 以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以 指向类内部产生的该类对象的变量也必须定义成静态的。
具体写法如下(4种)
1.单例(Singleton)设计模式 - 饿汉式
class Singleton{
//1.私有化构造方法
private Singleton(){
}
//2.类的内部提供一个当前类的实例
//4.此实例也必须静态化
private static Singleton single = new Singleton();
//3.提供公共的 静态的 get方法
public static Singleton getInstance(){
return single;
}
}
此种方法是饿汉式
特点: 不管是否用到 先new一个新的实例
2.单例(Singleton)设计模式 - 懒汉式
class Singleton{
//1.私有化构造方法
private Singleton(){
}
//2.类的内部先声明当前类
//4.必须静态化
private static Singleton single;
//3.提供公共的静态的 get方法
public static Singleton getInstance(){
//判断当前实例是否为null
if(single == null){
//如果为null,则new一个实例
single = new Singleton();
}
return single;
}
}
懒汉式
特点:先声明实例 当用到时再new出实例 线程不安全
3.单例(Singleton)模式 - 双重锁式
class Singleton{
//1.提供私有的构造方法
private Singleton(){
}
//2.声明实例
private volatile static Singleton single;
//3.提供公共的 静态的 get方法
public static Singleton getInstance(){
if(single == null){
synchronized(Singleton.class){
if(single == null){
single = new Singleton();
}
}
}
return single;
}
}
双重锁式: 重写了懒汉式,线程安全
4.单例(Singleton)模式 - 静态内部类式
class Singleton{
//1.提供私有的构造方法
private Singleton(){
}
//2.创建静态内部类
class StaticSingleton{
//3.类中实例化外部类的对象,用static final修饰
//final 修饰对象 此对象不能再new实例
private static final Singleton single = new Singleton();
}
//4.提供公关的 静态的 get方法 获取内部类中的外部类实例对象
public static Singleton getInstance(){
return StaticSingleton.single;
}
}
测试方法:
通过单例模式设计的类 无论实例化几次 在内存中都会只想一个地址
实例化方法:
Singleton single = Singleton.getInstance();
验证方法:
Singleton single1 = Singleton.getInstance();
Singleton single2 = Singleton.getInstance();
System.out.println(single1 == single2);
如果输出结果为 true 则表示内存地址相等 设计成功
java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...相关推荐
- filter java 是单例的吗_JAVA 设计模式之 单例模式详解
单例模式:(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点.单例模式是创建型模式.单例模式在现实生活中应用也非常广泛. 在 J2EE 标准中,S ...
- java单例注册表_Java单例模式(Singleton)
单例模式主要用于:有一些对象我们只需要一个,比如:线程池.缓存.对话框.处理偏好设置.注册表对象.日志对象以及配置文件对象.数据库连接对象等等.单例模式常用于管理共享资源,例如:数据库连接或者线程池. ...
- java 单例基类_PHP基于单例模式实现的数据库操作基类
本文实例讲述了PHP基于单例模式实现的数据库操作基类.分享给大家供大家参考,具体如下: 配置文件: $db = array( 'host'=>'localhost', 'user'=>'r ...
- java单例设计模式_Java设计模式之单例模式详解
在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...
- java中单例设计模式登记式单例类_java23种设计模式-创建型模式之单例模式
单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频 ...
- java 单例设计模式 [
为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例 //饿汉式 class Single{ //需要是static的,getInstance方法 ...
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...
- java 单例类_Java单例类
单例类: 主要知识点: 1,单例类概念.特点 2,三种单例类懒汉,饿汉,双重加锁举例, 3,懒汉.饿汉区别以及单例类的总结: 1,概念:java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单 ...
- java 线程安全的单例_线程安全的单例模式的几种实现
单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数:有利于java GC回收机制. 单例模式的三个好处: 1.控制资源的使用,通过线程同步来控制资源的并发访问 2.控制实例的产生个数,来达 ...
- (单例设计模式中)懒汉式与饿汉式在多线程中的不同
/*目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术 ...
最新文章
- kerberos java实现,基于kerberos实现jaas登录
- linux环境变量管理器,运维 - linux(ubuntu) 环境变量管理 (持续更新)
- mysql检查备份数据脚本并在zabbix上告警
- 推荐 15 款常用开发工具
- GeneralUpdate 2021.08.14更新公告
- JAVA的多态的优劣,向上转型,向下转型什么意思?
- ubuntu 的使用(五)—— 桌面(desktop)
- Android--数据存储
- 图片模糊处理批量生产模糊数据集
- android view translateanimation,Android:有没有办法在TranslateAnimation之后获得View的最新位置?...
- 程序猿 C语言入门 颈椎,【计时器小工具】70行代码让你远离颈椎病,致所有的程序猿们...
- 安卓手机获取root权限
- Matlab之使用linearization估计人口数量
- 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
- js定时器和延时调用的使用
- gradle编译慢解决_Gradle build 太慢,可能是你使用的姿势不对
- 王道2021版计算机考研书勘误表
- 项目管理:怎样做需求分析(一)
- PHP规范之PSR规范
- 《Python编程:从入门到实践》第13章:外星人来了
热门文章
- docker+MySQL+读写分离
- iOS开发之段落文字排版的属性与细节
- 工作经验总结:百万数据引发的性能瓶颈问题
- (转)SSDTShadow Hook的实现,完整代码
- 武魂金刚少林加点、装备坐骑及江湖技能选择
- error parsing xml:unbound prefix
- 语音信号处理基础(二)
- [转载] Python input()函数
- [转载] Python日历模块| 使用示例的weekday()方法
- [Bzoj1010][HNOI2008]玩具装箱toy(斜率优化)