前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JAVA中的单例模式笔记

JAVA中的单例模式笔记

原创
作者头像
帅的一麻皮
修改于 2020-06-24 06:48:12
修改于 2020-06-24 06:48:12
89700
代码可运行
举报
文章被收录于专栏:前端与Java学习前端与Java学习
运行总次数:0
代码可运行

如何保证对象的唯一性?

步骤:

1.一个类中只要提供了构造方法 就可以产生多个对象,完全不能够保证唯一,既然创建对象数量不可控,干脆不让其他程序建立对象,直接私有化构造方法,不让其他程序创建。

2.不让其他程序创建,那么对象在哪里呢?干脆在本类中创建一个对象,可以对对象进行可控。

3.创建完对象之后,需要提供方法来返回对象

代码示例:

第一种是饿汉式单例模式:

代码语言:java
AI代码解释
复制
//创建一个Single类
public class Single {
        //1、私有化构造方法
        private Single(){
        
        }
        //2、创建本类对象
        private static final Single s = new Single();
        //3、定义方法,返回对象
        public static Single getInstance(){
            return s;
      }
      
}

第二种是懒汉式单例模式(懒加载):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Single2 {
	//延迟加载    懒汉式单例模式
	private Single2(){
		
	}
	private static Single2 s2=null;
	
	public static Single2 getInstance(){
		if(s2==null){
			s2=new Single2();
		}
		return s2;
	}
}

测试获取的对象是否一致:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建一个SingleTest类
public class SingleTest {
    public static void main(String[] args) {
        //这样我们就可以保证获取对象的唯一性了
        Single s1 = Single.getInstance();
        Single s2 = Single.getInstance();
        Single s3 = Single2.getInstance();
        Single s4 = Single2.getInstance();
        System.out.println(s1==s2);//true   
        System.out.println(s3==s4);//true 
    }
}

解决多线程并发访问的线程安全问题,和加上同步机制后的效率降低问题:

代码语言:java
AI代码解释
复制
public class Single2 {
    //延迟加载    懒汉式单例模式
    private Single2(){}
    private static Single2 s2=null;
    
    public static Single2 getInstance(){
    //通过双重判断的方式,解决效率问题,减少对锁的判断次数
        if(s2==null){
            synchronized (Single2.class) {
                if(s2==null){
                    s2=new Single2();
                }
            }
        }
        return s2;
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java单例模式
  单例模式应该是我们接触的众多设计模式中的第一个,但是对于单例模式的一些细节地方对于初学者来说并不是很清楚,所以本文就来整理下单例模式。
用户4919348
2019/04/02
1.1K0
Java单例模式
Java 实现一个单例模式_Java实现单例模式的两种方式
单例模式在实际开发中有很多的用途,比如我们在项目中常用的工具类,数据库等资源的连接类。这样做的好处是避免创建多个对象,占用内存资源,自始自终在内存中只有一个对象为我们服务。
全栈程序员站长
2022/09/08
2260
Java 实现一个单例模式_Java实现单例模式的两种方式
java之单例设计模式
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和探索。
西西嘛呦
2020/08/26
2990
Java中如何保证一个类在内存中的对象唯一性
Java中如何保证一个类在内存中的对象唯一性,讲解如下: /** * 设计模式:对问题行之有效的解决方式。其实它是一种思想。 1,单例设计模式。 解决的问题:就是可以保证一个类在内存中的对象唯一性。 对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。 如何保证对象唯一性呢? 1,不允许其他程序用new创建该类对象。 2,在该类创建一个本类实例。 3,对外提供一个方法让其他程序可以获取该对象。 步骤: 1,私有化该类构造函数。 2,通过new在本类中创建一个本类
用户1696846
2018/07/16
2.3K0
Java设计模式之单例设计模式
Java设计模式之单例设计模式 /* 设计模式:对问题行之有效的解决方式。其实它是一种思想。 单例设计模式。(单个实例、单态) 解决的问题:可以保证一个类在内存中的对象唯一性。 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。 如何保证对象唯一性呢? 1,不允许其他程序用new创建该类对象。这样做的好处:可以避免产生更多对象。(别人创建的类不好控制) 2,在该类创建一个本类实例。(自己创建的类可以好控制) 3,对
黑泽君
2018/10/11
4470
Java单例模式synchronized、volatile
单例模式的好处:保证对象的唯一性,所谓单例,我的理解就是使用同一个对象,不能出现第二个一模一样的对象。
HaC
2020/12/30
8460
Java单例模式synchronized、volatile
Java之单例模式
要点: 饿汉式单例模式代码中,static变量会在类装载时初始化,此时也不会涉及多个线程对象访问该对象的问题。虚拟机保证只会装载一次该类,肯定不会发生并发访问的问题。因此,可以省略synchronized关键字。 问题:如果只是加载本类,而不是要调用getInstance(),甚至永远没有调用,则会造成资源浪费!
全栈程序员站长
2022/06/30
2200
单例模式的运用
单例模式:属于创建型模式,涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其**唯一的对象**的方式,可以**直接访问**,不需要实例化该类的对象。
忆愿
2024/08/01
1010
单例模式的运用
重学 Java 设计模式:实战单例模式
Java 设计模式中的单例模式旨在确保某个类在整个项目中只有一个实例,并且提供一个全局访问点,方便我们在其他类中调用。
啵啵肠
2023/11/15
2740
单例模式
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。 这样的模式有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。 UML
xiangzhihong
2018/02/05
1.2K0
Java---设计模块(设计模块的简介及最简单的俩个单例代码加测试)
设计模式学习概述: ★ 为什么要学习设计模式 1、设计模式都是一些相对优秀的解决方案,很多问题都是典型的、有代表性的问题,学习设计模式,我们就不用自己从头来解决这些问题,相当于在巨人的肩膀上,复用这些方案即可。 2、设计模式已经成为专业人士的常用词汇,不懂不利于交流。 3、能让你设计的系统更加专业,让系统有更好的架构。
谙忆
2021/01/21
2380
第20次文章:内部类+单例设计模式
本周首先紧接上周没有写完的内部类,详情点击《第19次文章:类加载器的加密解密+内部类》,再加单例模式的实现。
鹏-程-万-里
2019/09/28
4910
第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
Java基础面向对象-静态,单例模式,继承详情知识点。静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承。
达达前端
2019/07/03
4140
第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
设计模式 ---单例模式
单例模式概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。 GoF对单例模式的定义是:保证一个类、只有一
用户3479834
2021/02/03
4220
设计模式 ---单例模式
python设计模式之单例模式
最近打算研究下设计模式,最简单最著名的创建型设计模式就数单例模式了。下面我们来一起学习一下。
用户1564362
2019/10/10
8970
python设计模式之单例模式
朋友问我单例模式是什么?
某软件公司承接了一个服务器负载均衡(Load Balance)软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量分发到服务器集群中的多台设备上进行并发处理,提高了系统的整体处理能力,缩短了响应时间。由于集群中的服务器需要动态删减,且客户端请求需要统一分发,因此需要确保负载均衡器的唯一性,只能有一个负载均衡器来负责服务器的管理和请求的分发,否则将会带来服务器状态的不一致以及请求分配冲突等问题。如何确保负载均衡器的唯一性是该软件成功的关键,试使用单例模式设计服务器负载均衡器。
千羽
2021/12/29
5100
朋友问我单例模式是什么?
摸鱼设计模式——单例模式
饿汉式单例,无论是否使用,都直接初始化。其缺点则是会浪费内存空间。因为假如整个实例都没有被使用,那么这个类依然会创建,这就白创建了。
摸鱼-Sitr
2021/01/04
6800
摸鱼设计模式——单例模式
Java设计模式详解----单例模式
前言:软件设计模式( Software Design Pattern ),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。
ma布
2024/10/30
1160
Java设计模式详解----单例模式
大牧絮叨设计模式:单例模式
单例模式(Singleton)[GOF95]是一种对象的创建模式,确保系统中使用了单例模式的类型只会存在一个实例对象,通过该对象给系统提供一致性的解决方案。
大牧莫邪
2019/07/19
4350
大牧絮叨设计模式:单例模式
23设计模式之 --------- 单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
默 语
2024/11/20
890
23设计模式之 --------- 单例模式
相关推荐
Java单例模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验