Java设计模式之单例模式

java设计模式之单例模式——Singleton pattern 设计模式故事会:https://blog.youkuaiyun.com/weixin_40205234/article/details/90664824 单例模式 单例模式(Singleton pattern)是java中最常见的设计模式之一。该模式属于创建型设计模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一... 阅读详情

单例模式:

        核心思想:某些类的对象在创建的时候,在系统内存始终只有一个对象;

        优点:
                在系统中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式可以提高系统的性能;
        缺点:
                1> 没有抽象层,扩展很难;
                2> 职责过重,在一定程度上违背了单一职责;

        分类:
                1> 饿汉式;
                        简单记:在加载那个类的时候,对象的创建工作就已经完成了;
                2> 懒汉式(类似于多线程环境);
                         简单记:需要的时候才进行创建工作;

        两种分类在设计上几乎一样:
                1> 定义个类,将该类的无参构造方法私有化;
2> 在该类的成员位置创建该类对象并且一定要私有化,防止外界更改这个对象;
                3> 在该类中提供静态成员方法(返回值就是创建的那个对象),能被当前类直接调用,static修饰;

        实现:
                1> 构造函数私有化:
                        ①类外不可创建对象;
                        ②构造函数私有的类(父类),不可被继承(子类不能调用父类的私有);
                2> 类的静态成员,必须初始化;

                3> 静态数据成员的访问:不能通过对象直接访问,只能调用类中的静态方法间接访问;

饿汉式:

        举例:
                定义一个学生类:
package org.westos_03;

//学生类
public class Student {

	//无参构造私有化,目的为了防止用户创建对象的时候,会产生多个对象!
	//为了不让直接通过构造方法创建该类对象
	/*public Student() {
		
	}*/
        //无参构造私有化
	private Student() {

        }

	//成员位置创建该类的实例
	//静态方法只能访问静态变量,所以这个Student方法要加上static
	//加入私有修饰,防止定义对象之前将Student s=null	
	private static Student s = new Student() ; //静态的类变量

	//提供一个公共的成员方法
	public  static Student getStudent() {
		return s ;
	}
}
                测试类:
package org.westos_03;
/**
 *设计模式之单例模式
 *		单例模式核心思想:某些类的对象在创建的时候 ,在系统内存始终只有一个对象!
 *		单例模式分类:
 *			1)饿汉式 2)懒汉式(类似于多线程环境..)
 *
 *饿汉式:
 *		在加载那个类的时候,对象的创建工作就已经完成了
 */
public class StudentDemo {
	
	public static void main(String[] args) {
		
		//创建学生对象
		//在内存中有多个对象了
		/*
                Student s1  = new Student() ;
		Student s2  = new Student() ;
		System.out.println(s1==s2);    false
                */
		
		//修改当前那个类的成员
		//Student.s=null ;
		//直接更改了对象的值
		
		Student s1 = Student.getStudent() ;
		Student s2 = Student.getStudent();
		System.out.println(s1==s2);//true
		
		System.out.println(s1);//org.westos_03.Student@70dea4e
		System.out.println(s2);//org.westos_03.Student@70dea4e
	}
}

懒汉式:

        举例:
                定义一个老师类:
package org.westos_04;

//老师类
public class Teacher {
	
	//无参构造私有化
	private Teacher() {
		
	}
	
	//在成员位置声明变量
	//私有化,并且
	private static Teacher t = null ;
	
	//提供公共的静态功能
	/*public static Teacher getTeacher() {
		//如何创建该类对象,需要用的时候在创建
		//t1,t2,t3
		//在这里需要判断
		synchronized (t) {
			if(t==null) {
				t = new Teacher() ;
			}
			return t ;
		}
		
	}*/
	
	
	//静态的同步方法  (锁对象: 类名.class)
	public synchronized static Teacher getTeacher() {
		if(t==null) {
			t = new Teacher() ;
		}
		return t ;
	}
}
                测试类:
package org.westos_04;
/*
 * 懒汉式:
 * 		符合单例模式核心思想
 * 		1)自定义一个类,将无参构造私有化
 * 		2)在成员位置声明变量
 * 		3)提供公共静态功能,在里面判断的创建该类对象,返回该类对象
 * 
 * 如果是开发中,那么就使用饿汉式(饿汉式它不会出现问题的单例模式)
 * 如果是面试中,那么使用懒汉式(因为他是可能出现问题的一种单例模式)
 * 
 * 面试题:
 * 	你使用过单例模式吗?简单介绍一种单例模式,请用代码设计
 * 		面试官想问的是:使用设计单例的懒汉式,能否想到使用同步机制解决线程的安全问题..
 * 
 * 懒汉式(延迟加载 -->懒加载)
 * 		可能会出现问题
 * 			--->多线程的问题
 * 			--->校验多线程安全问题的标准
 * 				1)是否是多线程环境
 * 				2)是否有共享数据
 * 				3)是否有多条语句对共享数据进行操作  (使用同步机制进行操作)
 *
 */
public class TeacherDemo {
	
	public static void main(String[] args) {
		
		//调用getTeacher()功能
		Teacher t1 = Teacher.getTeacher() ;
		Teacher t2 = Teacher.getTeacher() ;
		System.out.println(t1==t2);
		System.out.println(t1);//org.westos_04.Teacher@70dea4e
		System.out.println(t2);
		}
}



【Java设计模式】Java设计模式之(一)单例模式(Singleton Pattern) 本文继续介绍23种设计模式详解系列之单例模式。 一、单例模式的定义 指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 二、单例模式的常见例子 Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误;在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中 阅读详情

相关推荐

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

蜗牛的专栏 3432

设计模式梳理之单例模式

单例模式,从字面意思来看,比较容易理解,单个实例的模式,这也是单例模式的主要思想,思想大概主题时限制一个类只能有一个实例化对象,大概意思就是,通过判断来分析是否存在实例化对象,存在则返回已实例化的对象,如果不存在则实例化且返回对象,但是也并不是所有的单例模式思想都要从构造函数观点出发,不是实例也可以体现出单例模式的优点 基础单例模式 这里说的基础的单例模式实际上与网上大部分文章讲的不一样 其实不从类出发,更容易理解,这里说一下单例模式的主要优点,第一个优点就是,解决全局变量的污染,我们在开发的过程中,.

小张的博客 709

VN5620硬件接口介绍

VECTOR, VN5620, 诊断

Fecostar的博客 7473

浅谈设计模式之单例模式

单例模式,可以说是众多设计模式中的最简单的一种的设计模式。因为它更易于理解和更易于掌握。   一、单例模式最核心的思想:Ensure a class has only one instance, and provide  a global point of access to it.(为了确保一个类只有一个实例(对象),并且为这个对象提供一个全局访问点)   二、个人理解:就是在整个程序运行的

Mikyou的专栏 1123

实战避坑:示波器测量非隔离开关电源的炸机风险与隔离方案

本文详细分析了使用示波器测量非隔离开关电源时的炸机风险,揭示了地线环路导致的短路问题,并对比了四种防炸机解决方案,包括示波器隔离供电、拔掉电源地线、使用差分探头和被测板隔离供电。重点推荐使用隔离变压器方案,确保测量安全与精度,同时提供了实操建议与经验分享,帮助工程师避免常见测量事故。

weixin_29224309的博客 551

【数字IC/FPGA】低功耗设计

低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结 功耗的类型 CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充

qq_40268672的博客 3069

php单例模式的核心语句,PHP单例模式的核心思想 - 金牛座, 爬山虎, PHPCreeper, Workerman, Swoole, PHP爬虫引擎, PHP爬虫框架, 网页采集器, 数据抓取, ...

单例模式的核心思想是:保证一个对象存在且仅允许存在一个实例,并提供一个全局访问方式。单例模式的运作模型是:当对象第一次被请求时,创建这个对象的实例之后的每次请求,仅传递已创建实例的句柄。与单例模式相对应的模式叫做 Prototype(Java平台下),在此种模式下,每次请求一个对象,都将新建一个实例。在WEB程序中应用单例模式的一个典型例子是数据库连接的创建:通过数据库句柄来连接数据库这一行为是独...

weixin_39751327的博客 166

[QMT量化交易小白入门]-三十七、QMT中如何使用类似于通达信中的VBA函数(量化python代码解析)

这段代码主要围绕着在QMT环境中实现类似通达信VBA函数的功能展开,核心功能是基于RSI指标来判断股票的买卖时机,并根据持仓情况进行相应的交易操作。class G():passg = G()这里定义了一个空类G,并创建了该类的实例g。这个实例g将作为全局变量来存储一些在整个程序运行过程中需要共享的数据,例如除复权类型、股票代码、目标数量等。1、使用VBA开发策略时,参数固化的问题会带来一些限制,比如无法修改MA函数的周期参数,只能使用固定周期。

木头大左的博客 1690

单例模式

单例模式的概念 在运行期间,保证某个类只创建一个实例,保证一个类仅有一个实例,并提供一个访问它的全局访问点。下面就来讲讲Java中的N种实现单例模式的写法。 饿汉模式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } //提供一个全局访问的节点 public static Singleton getIn

qq_41723573的博客 181

【四足机器人项目实战】四足机器人弹簧倒立摆(SLIP)动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1.动力学建模构型方法2.四足机器人动力学模型(1)多体动力学模型【针对躯干+脚建模】方法一:VMC(VirtualModelController)模型方法二:SLIP模型(2)浮基单体动力学模型【针对躯干建模】【用于MPC】 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简

qq_35635374的博客 7310

华为OD干了两个月,还是跑了

​本人工作了快13年,base南京。2024年2月份由于公司业务变动第一次拿到了公司发的大礼包,同时也面临着失业的问题,我对自己的技术还是很有信心的,但是,找了大概有一个多月时间,发现心意的工作的确不太好找,当然收到挺多家offer,就是薪资不太满意,外包也一直不想去,不过说实话外包给的薪资普遍要比自研的单位要高一些,最后为了钱还是进华为(既然选择外包那就选择好一些的吧),毕竟中年老男人工作不能断太久。

啊渊的专栏 1万+

Java设计模式之饿汉式和懒汉式

Java设计模式之饿汉式和懒汉式 老师说饿汉模式是线程安全的,为什么没有用synchronized 关键词修饰? 采用synchronized 关键词修饰与不采用synchronized 关键词修饰有什么区别? 因为饿汉模式这个类在加载的时候就实例化了,就算thread1和thread2同时获取它,取到的是类加载时实例化的那个变量的值,所以说是线程安全的;而懒汉式线程不安全,因为有可能thre...

weixin_43287508的博客 4632

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

详解Java设计模式之单例模式(Singleton Pattern)

单例模式只包含一个 Singleton(单例角色)类,在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以使用它的唯一实例。

Elegance never goes out of fashion 2745

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

彻底搞懂设计模式DesignPattern-单例模式-java.lang.Runtime看单例懒汉式

参考 炸斯特 - JAVA设计模式之单例模式 简介 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。 比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。 特点 java中单例模式是一种常见的设计模式,

Ping 365

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java 设计模式 二 单例模式 (Singleton Pattern)

单例模式是一种非常常见且有用的设计模式,能够确保类只有一个实例,并且提供全局访问点。在 Java 中,推荐使用静态内部类单例模式和枚举单例模式,这两种方式在性能、线程安全性和代码简洁性上都非常优秀。

空 1307

java设计模式之单例模式(Singleton Pattern)

本文中介绍了几种实现单例的方法,主要包括饿汉、懒汉、使用静态内部类、双重校验锁、枚举等。还介绍了如何防止序列化破坏类的单例性。从单例的实现中,我们可以发现,一个简单的单例模式就能涉及到这么多知识。在不断完善的过程中可以了解并运用到更多的知识。所谓学无止境。

白话机器学习 261

java设计模式之单例模式(Singleton pattern)

java设计模式之单例模式(Singleton pattern) 单例模式的定义: Singleton pattern restricts the instantiation of a class and ensures that only one instance of the class exists in the java virtual machine. The singlet

nobody 2249

JAVA设计模式——单例模式八种方式

目录 单例模式简介: 应用场景: 单例设计模式的八种方式: 1、饿汉式(静态常量) 2、饿汉式(静态代码块) 3、懒汉式(线程不安全) 4、懒汉式(线程安全,同步方法) 5、懒汉式(线程安全,同步代码块) 6、双重检查(推荐使用) 7、静态内部类(推荐使用) 8、枚举(推荐使用) 单例模式在JDK应用的源码分析 单例模式注意事项和细节说明 单例模式简介: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供

龍弟-idea的博客 7110

【Java】设计模式之单例模式(Singleton Pattern)

 单例模式是 Java 众多设计模式的一种,也是平时用到较多、适用范围较广的一种设计模式,隶属创建型模式。 什么设计模式?说白了就是问题的解决方案,计算1加到100可以每个数字逐个加,也可以像高斯一样首尾相加乘50,设计模式是对问题的一种优秀的解决方案,所以我们需要来看看单例模式这个答案出现之前,所存在的问题: 假设有一个类 它的对象需要被频繁的使用,所以经常需要创建与销毁,而恰...

Decmoon的博客 348

Java设计模式—单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是一种创建型设计模式,一种非常非常常用的设计模式。它保证一个类仅有一个实例,并提供一个访问它的全局访问点;饿汉式:类加载时就创建了对象实例,因此线程安全,但会造成资源浪费;懒汉式:只有在需要时才创建对象实例,节省了系统资源,但需要考虑线程安全问题;双重校验锁:在懒汉式的基础上加入双重校验,保证了线程的安全且减少了锁的“竞争”;饿汉式:类加载时创建对象实例。懒汉式:只有在需要的时候才创建对象实例。

是个非常热爱生活、乐观、奋斗、努力的逗比青年 712

Java常用设计模式-单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式 特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例 懒汉式: package com.example; /** * 懒汉式 * 加锁 synchronized线程安全 */ public class Stu...

gang_luo的博客 433

java23种设计模式之一: 单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是设计模式中比较常用的一种,下面来总结单例模式的知识,包括: 1、理解什么是单例模式、单例模式有什么优点/缺点、单例模式的应用场景; 2、再来看看Java单例模式的6种代码实现方式、每种实现方式有什么需要注意的; 3、后面再来了解Java单例模式其他值得关注的地方,如比较静态方法、以及Java反...

255

JAVA23种设计模式之单例模式(Singleton Pattern)

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 介绍 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个

fuu123f的博客 221

【Java设计模式】之 单例模式(Singleton Pattern)模式 饿汉式单例模式 vs 懒汉式单例模式

什么是设计模式? 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模免去我们自己再思考和摸索,设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,"套路”。 设计模式的分类: ① 创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 ② 结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 ③ 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、

weixin_46081857的博客 418
上一篇: Java设计模式之简单工厂模式
下一篇: Java基础之网络编程(UDP,TCP)
Future_LL
博客等级 码龄9年 215粉丝 255原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值