简单理解常用设计模式(十二)单例模式

十二种设计模式 作用:面向对象高内聚(Cohesion)和低耦合(Coupling)。因此,无论是封装、继承、多态还是设计模式都是为了这两个目标在努力。设计模式体现的是一种思想,而思想是指导行为的一切,设计模式可以指导程序员设计和开发。​。 阅读详情

这里记录下经常会遇到,面试也经常会被问的单例模式。

单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点

见如下代码,说明在代码注释内已经很清楚了:

package com.gcc.singletonModel;
/**
 * 懒汉式单例(调用静态方法才实例化)
 * 只适合单线程
 * 多线程存在问题如:
 * 当两个线程同时运行到判断instance是否为空的if语句,并且instance确实没有创建好时,那么两个线程都会创建一个实例。
 *
 */
public class Singleton1 {

	private static Singleton1 singleton=null;
	
	private Singleton1(){}
	
	public static Singleton1 getSingleton(){
		if (singleton==null) {
			singleton=new Singleton1();
		}
		return singleton;
	}
	
}
package com.gcc.singletonModel;
/**
 * 懒汉式单例(调用静态方法才实例化)
 * 适合单线程和多线程
 * 存在问题:加了同步锁以实现多线程可用,但每次执行这个方法都会执行同步锁,而同步锁耗时比较多,效率会降低
 */
public class Singleton2 {

	private static Singleton2 singleton=null;
	
	private Singleton2(){}
	
	public static synchronized Singleton2 getSingleton(){
		if (singleton==null) {
			singleton=new Singleton2();
		}
		return singleton;
	}
	
}
package com.gcc.singletonModel;
/**
 * 懒汉式单例(调用静态方法才实例化)
 * 适合单线程和多线程
 * 在对象新建后,不会再走同步锁,提高的了效率。
 * 存在问题:代码可读性下降
 */
public class Singleton3 {

	private static Singleton3 singleton=null;
	
	private Singleton3(){}
	
	public static Singleton3 getSingleton(){
		if (singleton==null) {
			synchronized (Singleton3.class) {
				if (singleton==null) {
					singleton=new Singleton3();
				}
			}
		}
		return singleton;
	}
	
}
package com.gcc.singletonModel;
/**
 * 饿汉式单例(调用静态方法前,提前创建实例),相对而言比懒汉式好。
 * 适合单线程和多线程
 * 存在问题:没有lazy loading的效果,即不调用getSingleton方法,而只是“主动使用”Singleton4这个类,就会new对象。
 * 这里所说的主动使用 包括:
	1. 创建类的实例
	2. 调用类的静态方法
	3. 使用类的非常量静态字段
	4. 调用Java API中的某些反射方法
	5. 初始化某个类的子类
	6. 含有main()方法的类启动时
 * (当然提前创建的影响不会很大,所以这样使用也没什么问题)
 */
public class Singleton4 {

	private static Singleton4 singleton=new Singleton4();
	
	private Singleton4(){}
	
	public static Singleton4 getSingleton(){
		return singleton;
	}
	
}
package com.gcc.singletonModel;
/**
 * 静态内部类单例(调用静态方法时,才通过内部类新建实例),推荐使用
 * 适合单线程和多线程
 * 定义一个私有的内部类,在第一次用这个嵌套类时,会创建一个实例。
 * 类型为SingletonHolder的类,只有在Singleton.getSingleton()中调用,由于私有的属性,他人无法使用SingleHolder,
 * 不调用Singleton.getSingleton()就不会创建实例。
 * 优点:达到了lazy loading的效果,即按需创建实例
 */
public class Singleton5 {

	private Singleton5(){}
	
	private static class SingletonHandle{
		private static Singleton5 singleton=new Singleton5();
	}
	
	public static Singleton5 getSingleton(){
		return SingletonHandle.singleton;
	}
	
}





【设计模式】用Java手写21种常见设计模式 文章目录十二、行为1——模板方法模式十三、行为2——迭代器模式 配套使用效果更佳: 本博客配套开源源码github点击跳转 在《25种常见设计模式思想(上)》中我介绍了4种创建型设计模式和7种结构型设计模式,在此博客中我将继续介绍剩下的x种行为类设计模式。以下是本篇博客的思维导图: 十二、行为1——模板方法模式 模板方法模式非常类似于定制表格,设计者先将所有需要填写的信息头(字段名)抽取出来,再将它们整合在一起成为一种既定格式的表格,最后让填表人按照这个标准化模板去填写自己特有的信息,而不必为书写内容、先 阅读详情

相关推荐

Hopf振荡器在机器人步态控制里到底怎么用?一个CPG仿生案例说清楚

本文深入解析了Hopf振荡器在机器人步态控制中的实际应用,通过CPG仿生案例详细展示了从数学方程到关节指令的完整流程。重点探讨了Hopf振荡器的极限环稳定性、参数调节技巧及自适应控制策略,为机器人运动控制提供了高效解决方案。

weixin_29284657的博客 201

GCC使用入门(一)(

<br />http://developer.51cto.com/art/200609/32317.htm<br /> <br />通<br />常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用

481

从问卷到结论:手把手教你用SPSS 28完成一份完整的社科数据分析报告

本文详细介绍了如何使用SPSS 28完成社会科学研究中的数据分析报告,从问卷数据导入、清洗到描述性和推断性统计分析,再到结果呈现与报告撰写。通过实际案例演示,帮助研究者掌握SPSS 28的核心功能,提升数据分析效率与报告质量。

weixin_28717431的博客 249

简单理解常用设计模式(二)策略模式

写完简单工厂模式后,这里说说策略模式,厉害的观众已经发现了,简单工厂在有些场景非常不合适,例如市场营销的场景,商场打八折,打五折,满五百减一百,满两百减五十,不打折等。市场经常会变动这些策略,如果是简单工厂就需要每次都改动工厂类,用来添加新的策略,然后添加具体的实现类。这样每次变动都要修改项目,二次开发工作量很大,非常的不理想。所以仔细思考。每加一个策略,都加一个类,这样做好吗,面向对象不是类越多...

gcc_java的博客 380

别再花钱买商业软件了!这4款免费DIC工具,从散斑生成到应变分析全搞定

本文介绍了4款免费开源的DIC(数字图像相关技术)工具,涵盖从散斑生成到应变分析的全流程,帮助用户零成本构建专业级DIC工作流。这些工具在精度、算法透明度和生态整合方面具有优势,适用于材料力学和实验力学研究,可替代昂贵的商业软件。

weixin_42525369的博客 168

[AI] 本地部署 Dify 遇到 Internal Error?一文彻底解决密码不一致引发的问题

摘要:Dify本地部署常见InternalError错误主要由配置残留或密码不一致导致,特别是修改.env文件后未同步清除数据库记录。彻底解决方案包括:1)清理Docker数据;2)删除旧配置和数据库;3)还原源代码;4)重建.env文件;5)重新初始化部署。关键提醒:记录部署路径、备份.env文件并妥善保存密码。该错误本质是配置冲突,最有效方法是完全重置而非调试,保持清晰的部署管理可避免多数InternalError问题。(149字)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 435

GCC编译简单范例

1.单一程序:打印Hello 源文件为hello.c 无选项编译链接 gcc hello.c 将hello.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out 选项 -o -o选项用来指定输出文件的文件名 gcc hello.c -o hello 选项 -E gcc -E hello.c -o hello.i 将hello.c预处理输...

Co_zy的博客 1873

华为OD机试2025C卷-双十一最大花费金额[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率

双十一最大花费金额 - 动态规划解法 摘要:本文介绍了华为OD机试中"双十一最大花费金额"问题的动态规划解法。该问题要求在给定N件商品价格和优惠券面额X的情况下,选择若干商品使总花费不超过X且尽可能大。核心解法采用布尔型动态规划数组,记录每个金额是否可被拼出。算法时间复杂度为O(N*X),空间复杂度为O(X)。通过倒序遍历避免重复选择同一商品,最后从X向下查找第一个可达金额作为答案。文中提供了C++和Java的实现代码,并解释了与经典0-1背包问题的关系。 关键点: 问题本质是0-1背包/子集和问题的变体

2503_91057718的博客 46

简单理解常用设计模式(三)常用设计原则

1:单一职责原则:就一个类而言,应该只有一个引起它变化的原因;若职责(功能)太多,等于耦合了各种功能,假如要修改其中一种,很大可能会导致其它功能的变化甚至破坏。2:开放-封闭原则:对于代码实体(类,模块,函数等)应该可以拓展,但不能修改;开闭原则的好处是,在实际开发中,需求会多次改变但程序还是会相对稳定,从而使第一个版本后可以不断推出新版本。3:依赖倒转原则:抽象不应该依赖细节,细节应该依赖抽象,...

gcc_java的博客 248

SAP-ABAP:SAP信贷管理核心:CL_UKM_BUPA_FACTORY类完整解析与实践指南

SAP信贷管理核心类CL_UKM_BUPA_FACTORY解析 CL_UKM_BUPA_FACTORY是SAP信贷管理(UKM)模块的核心类,作为业务伙伴信贷数据的中央控制台,它提供: 统一入口:标准化实例化客户/供应商信贷对象 主要功能: 获取单条/批量业务伙伴数据 安全保存数据变更 封装底层数据访问逻辑 典型应用场景: 信贷主数据批量维护 自动化限额调整 订单信贷实时检查 性能优化建议: 使用批量方法替代循环单条处理 合理设置字段选择 实施缓存策略 该类通过简洁API简化复杂信贷操作,是SAP信贷管理开

baidu_35680696的博客 1209

Android 10.0 SystemUI下拉状态栏点击设置跳转设置时白屏修改

在10.0的系统rom定制化开发中,在SystemUI下拉状态栏下方点击设置图标跳转设置的过程中,发现 有白屏显示挡住设置界面,显示白屏,接下来分析下相关原因来解决这个问题

安卓兼职framework和app工程师的博客 80

设计模式详解(十二):单例模式——Singleton

单例模式 (Singleton Pattern) 是一种常见的设计模式,用于确保一个类在整个应用程序运行期间只有一个实例,并提供全局访问点。本文将详细介绍单例模式的定义、实现方式、优缺点,以及 Android 源码中的使用实例,配以图解与注释。唯一性:确保类只有一个实例。全局访问:提供对该实例的全局访问。

Android Engineer. 1658

YOLOv11改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv11目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 3600

Java常用的十二种设计模式

Java常用设计模式

zy的博客 976

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

我理解的设计模式——下

上一篇博客对设计模式的前十个模式进行了理解和剖析,这一篇博客将《大话设计模式》中剩下的一些模式进行总结,再次对设计模式理解和认识,在总结的过程中我发现我虽然是对每一个模式依次的理解,但是最后的收获却是对整个设计模式这个范畴的一个统一理解和认识,认识了设计模式的中心思想,认识了设计模式的惯用手法,认识了设计模式的最终目的,但是由于小生道行不够所以还有些欠缺的地方,相信会在以后的学习和运用中会对设计模

任长江 1004

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

美团面试官喜欢问的——11种常用的设计模式

Java常用的11种设计模式,你都会吗?

程序大视界 2461

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

每天学习一个设计模式(十二):创建型之单例模式

一、基本概念 单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 二、通俗解释 SINGLETON 单例模式:俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了

简简单单的博客 1784

java学习视频 java常用23种设计模式

java学习视频主要详细讲解java常用23种设计模式,此套java教程为百度网盘下载! 我曾经花了1万多报过java培训班.可能太过愚钝,感觉白学了。这套java学习视频讲的很好,我培训过,虽说学的很差,但是耳濡目染也算有点基础,写作业的时候没什么思路,但是参考了别人的思路,自己也能写完,写完作业感觉很有成就感。祝大家学有所成!   java学习视频介绍   java常用23...

fengliaoai的博客 1万+

常用设计模式

目录 1简单工厂模式 Simple Factory Pattern 2工厂方法模式 Factory Method Pattern 3抽象工厂模式 Abstract Factory Pattern 4 建造者模式 Builder Pattern 5 单例模式 Singleton Pattern 6 适配器模式 Adapter Pattern 7装饰模式 Decorator Pa...

ChaunceyChen的博客 348

设计原则和设计模式的理解

设计原则: 1.单一职责原则:尽量保证每一个类或者接口拥有单一的职责,即专业性,比如说一个人学的东西太广就容易不精,代码也是一样,一项功能块的修改有可能会影响其他的功能块。 2.里氏替换原则:子类尽量不要重写和重载其父类的方法,可能会导致子类无法使用父类的功能,即子类继承只为了扩展不为了修改。 3.依赖倒置原则:细节依赖抽象,业务逻辑牵一发而动全身,通过接口进行类之间的依赖可进一步解耦。

MaPengHao的专栏 460

韩顺平设计模式之单例模式

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

行云流水Gz的专栏 585

常用设计模式介绍~~~ Java实现 【概念+案例+代码】

常用设计模式介绍~~~ Java实现 【概念+案例+代码】

日常笔记 | 干货分享 | 毕设源码 | 毕设指导 | 答辩指导 2139

Java常用设计模式1

Java设计模式为: 二十三种设计模式,本文介绍十二个常用设计模式: strategy(策略模式)、static Factory Method(静态工厂)、singelton(单例模式)、Observer(观察者模式)、Iterator(迭代器模式)、Facade(外观模式)、adapter(适配器模式)、Proxy(代理模式)、state(状态模式)、Flyweight(享元模式)、Chain

生命缘迹的专栏 720

Java常用的设计模式和开发模式

一、设计模式的分类 设计模式是不分语言的;前辈们总结出来的设计模式分:3种类型及23种模式: 设计模式主要分三个类型:创建型、结构型和行为型。 其中创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、AbstractFactory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、Fact...

Sple的博客 481

JAVA第十二课:设计模式

文章目录1. 面向对象思想设计原则2. 设计模式3. 面试4. Runtime类 1. 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 单一职责原则 开闭原则 里氏替换原则 依赖注入原则 接口分离原则 迪米特原则 单一职责原则 其实就是开发人员经常说的”高内聚,低耦合”, 也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个。 在设计模式中,所有的设计模式都遵循这一原则。 开闭原则 核心思

爱思考的小伙 240

java常用的设计模式和开发模式有哪些

一、设计模式的分类 设计模式是不分语言的;前辈们总结出来的设计模式分:3种类型及23种模式: 设计模式主要分三个类型:创建型、结构型和行为型。 其中创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、Factory

wdvceafvcsrgfv的博客 8684
上一篇: 简单理解常用设计模式(十一)适配器模式(例如姚明叫人翻译英文)
下一篇: java编程思想随笔(二)/初始化
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值