首页 > 编程语言 >2.单例模式(Singleton)JAVA语言实现

2.单例模式(Singleton)JAVA语言实现

时间:2022-10-30 17:26:04浏览次数:50  
标签:Singleton JAVA 对象 singleton 单例 public 加载

单例模式实现
1.私有的构造方法
2.私有的静态的当前类对象作为属性
3.共有的静态的方法返回当前类对象

单例模式实现方式有三种(指的时对象的加载)
1.饿汉式(立即加载)对象启动时就加载了
不会产生对象没有就拿来使用的问题 即空指针异常
启动项目加载的对象过多,有些还没使用到,产生服务器承载压力的问题
2.懒汉式(延迟加载)对象什么时候用到了,才会加载
可能会由于没有操作好,导致异常(需要很严谨的控制)
启动项目时只有需要的时候才加载对象,不需要的时候还没有创建,不会浪费空间
*3.生命周期托管(单例对象别人帮我们处理)对象加载过程交给别人

1.饿汉式单例模式

 1 //饿汉式单例模式
 2 public class Singleton {
 3     //外面不能创建Singleton对象,从源头控制Singleton对象的个数
 4     private Singleton(){}
 5 
 6     //类属性singleton保存一个
 7     private static Singleton singleton = new Singleton();
 8 
 9     public static Singleton getSingle(){
10         return singleton;
11     }
12 }

Main函数写法

1 public class Main {
2     public static void main(String[] args){
3         Singleton singleton1 = Singleton.getSingle();
4         Singleton singleton2 = Singleton.getSingle();
5         System.out.println(singleton1 == singleton2);
6     }
7 }

执行结果:

 

 

2.懒汉式单例模式

 1 //懒汉式单例模式
 2 public class Singleton {
 3     //外面不能创建Singleton对象,从源头控制Singleton对象的个数
 4     private Singleton(){}
 5 
 6     //类属性singleton保存一个
 7     private static Singleton singleton;
 8 
 9     public static Singleton getSingle(){
10         if(singleton == null){
11             singleton = new Singleton();
12         }
13         return singleton;
14     }
15 }
1 public class Main {
2     public static void main(String[] args){
3         Singleton singleton1 = Singleton.getSingle();
4         Singleton singleton2 = Singleton.getSingle();
5         System.out.println(singleton1 == singleton2);
6     }
7 }

执行结果:

 

 

第三种实现方式还没学到,等学到了在再更新

标签:Singleton,JAVA,对象,singleton,单例,public,加载
From: https://www.cnblogs.com/lanshanxiao/p/16841698.html

相关文章

  • cryptoJs DES_CBC_Pkcs7 转成 Java
    前端DES加密:importcryptoJsfrom'crypto-js';//DES加密functionencrypt(message,key,iv){//字符串转16进制constkeyHex=cryptoJs.enc.Utf8.parse......
  • Java基础------方法
    什么是方法Java方法是语句的集合,他们在一起执行一个功能设计方法的原则:方法的本意是功能模块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,......
  • JavaScript学习
    (只用于自己学习,只是个目录形式,具体内容涉及不多)JavaScript用于用户和网页之间的交互,比如提交的时候,用于用户名是否为空的判断 1.document是JavaScript的内置对象,代表浏......
  • JAVAWeb - HttpServletRequest
    一.Request入门HttpServletRequest:代表客户端的请求,通过http协议访问服务器,Http请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户......
  • java面向对象-->封装
    封装封装的作用是在于:如何正确设计对象的属性和方法。封装的重要原则:对象代表什么,就要封装对应的数据,并提供数据对应的行为。比如说人画圆,涉及到了人和圆俩个对象,画圆......
  • 力扣784(java)-字母大小写全排列(中等)
    题目:给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。以任意顺序返回输出。 示例1:输......
  • Java 从入门到放弃11 - 《Maven》
    说点题外话,没想到突然又重拾更新,在这期间学习了java的许多知识,还补充了sql语句,数据库相关的内容,由于时间关系,中间部分的内容都没有做相应笔记和博客,因为sql的语句还有中间......
  • java多线程-线程安全集合
    CopyOnWriteArrayListCopyOnWrite思想就是将原来的数据copy一份出来修改,然后把修改后的数据替换原来的数据。在setArray之前并发读到的还是旧数据,弱一致性。publi......
  • java spring项目中使用设计模式和函数式编程的思想去除业务逻辑中的if else判断
    如果你开发项目时对项目之后的发展很清晰但仍陷入了为什么要用设计模式替换ifelse的疑问时就说明你项目的体量不需要用设计模式答案只在问题提出之后有意义策略和状......
  • Java_JVM探究
    请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新?什么是OOM,什么是栈溢出StackOverflowError?怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取,怎么分析Dump文件?谈......