设计模式之单例模式8种实现方式,其一:饿汉式-静态常量饿汉式
实现方式分为3步骤:
1.构造方法私有化
2.类的内部创建对象
3.向外部暴露一个静态的公共方法
实例:
package singlePattern;public class SinglePattern1 {//类的内部创建对象private static final SinglePattern1 singlePattern1 = new SinglePattern1();//构造方法私有化private SinglePattern1(){}//向外暴露一个静态的公共方法public static SinglePattern1 getInstance(){return singlePattern1;}}
4.优劣点:
1)优点:这种方法比较简单,就是在类装载的时候就完成实例化,避免了线程同步问题。
2)缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。
3)这种方式基于classloader机制避免了多线程的同步问题,不过,instance在类装载的时候就实例化,在单例模式中大多数都是调用getInstance方法,但是导致类装载的原因有很多种,因此不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance就没有达到lazy loading的效果
4)结论:这种单例模式可用,可能造成内存浪费
设计模式之单例模式8种实现方式,其一:饿汉式-静态常量饿汉式相关推荐
- 设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在公共方法的内部生成实例的代码块加上synchroniz ...
- 设计模式之单例模式8种实现方式,其八:枚举方式
实现方式: package singlePattern;enum Singleton{INSTANCE;public void method(){} } 优缺点说明: 1.这借助JDK1.5中添加的枚 ...
- 设计模式之单例模式8种实现方式,其六:双重检查
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化,给该静态变量添加volatile关键字,设定instance为共享变量 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在 ...
- 设计模式之单例模式8种实现方式,其七:静态内部类
实现方式: 1.构造方法私有化 2.创建静态内部类 3.在静态内部类里面创建外面类的final修饰的实例 4.通过静态共有方法去返回创建的实例 代码如下: package singlePattern; ...
- 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在外部暴露的公共方法上添加synchronized关键字 ...
- 设计模式之单例模式8种实现方式,其三:懒汉式(线程不安全)
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 案例: package singlePattern;publ ...
- 设计模式之单例模式8种实现方式,其二:饿汉式-静态代码块饿汉式
饿汉式(静态代码块)应用步骤: 1.构造器私有化 2.创建类的静态变量,不实例化 3.静态代码块实例化 4.向外部暴露一个静态的公共方法 案例: package singlePattern;publi ...
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
最新文章
- C语言 · 身份证号码升级
- eeglab中文教程系列(8)-选择数据的epochs并进行比较
- JZOJ 1533. 郁闷的gxg
- java代码里的JSON格式怎么写好看_谁会不爱让代码骚里骚气的VSCode扩展插件呢?...
- java mvc 获取session_Spring MVC----获取session/request
- Python 日期 的 加减 等 操作
- 怎样快速画出一个正方体_图形与几何---正方体
- 编程体系结构(07):JavaEE之Web开发
- python 字符串去重且相同字符最多出现2次_【Python】获取字符串中出现次数最多/少的字符...
- Mybatis(12)事务原理和自动提交设置
- 【技术】一份完全解读:是什么使神经网络变成图神经网络?
- mysql syncmasterinfo_sync_master_info的一些说明
- javascript事件机制
- plsql本机不安装数据库连接远程数据库
- linux phpredisAdmin安装步骤
- 计算机桌面工具栏出现闪烁,电脑任务栏图标一直闪动怎么解决
- 丹佛机场行李系统案例分析
- 22年字节跳动飞书人力套件二面面经
- 仿真软件proteus构建流水灯实验
- 决策树与随机森林Adaboost算法
热门文章
- android自定义省略号,Android开发自定义TextView省略号样式的方法
- php windows 网络流量,PHP系统流量分析的程序
- 安卓最好的浏览器_Wow!来自印度的操作系统,Prime OS X86安卓体验
- 2019云计算战局前瞻:百度云要啃“硬骨头”
- Java基础学习总结(92)——Java编码规范之排版、注释及命名
- Java基础学习总结(56)——学Java必知十大学习目标
- html的设置语言为en,CSS中的html [lang =“ en”]和html:lang(en)有什么区别?
- JavaScript高级程序设计学习(二)之基本概念
- 人民币金额小写转大写
- 云浮市云计算大数据中心预计明年6月建成