单例设计模式

2023-05-16

目录

    • 一、设计模式
      • 1.理解
      • 2.常用设计模式--- 23种经典的设计模式
    • 二、单例设计模式
      • 1.概念:
      • 2.如何实现?
      • 3.饿汉式和懒汉式的区别
      • 4.应用场景:
    • 三、模板方法的设计模式
      • 1.解决的问题
      • 2.举例
      • 3.应用场景


一、设计模式

1.理解

设计模式是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式。

2.常用设计模式— 23种经典的设计模式

  • 创建型模式,共5种, 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  • 结构型模式,共种:适配器模式、装饰器横式、代理模式、外观模式、桥接模式、组合横式、享元横式。
  • 行为型模式,共11种: 策略模式、模板方法模式、观察者横式、迭代器模式、责任链模式、命令模式、* * 备忘录模式、状态横式、访问者模式、中介者模式、解释器模式。

二、单例设计模式

1.概念:

所谓类的单利设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例。

2.如何实现?

饿汉式 VS 懒汉式

3.饿汉式和懒汉式的区别

饿汉式:

  • 坏处,对象加载时间过长。
  • 好处,线程安全的。

懒汉式:

  • 好处,延迟对象的创建。
  • 坏处,线程不安全的。

4.应用场景:

网站计数器,应用程序的日志应用,数据库连接池,Application。

饿汉式代码实现:

public class SingletonTest{
	public static void main(String[] args){
		Bank bank1 = Bank.getInstance();
		Bank bank2 = Bank.getInstance();
		System.out.println(bank1 == bank2);//true
	}
}

//饿汉式
class Bank{
	//1.私有化类的构造器
	private Bank(){
	
	}
	//2.内部创建类的对象
	private static Bank instance = new Bank();
	//3.提供公共的静态的方法,返回类的对象
	public static Bank getInstance(){
		return instance;
	}
}

懒汉式代码实现:

public class SingletonTest{
	public static void main(String[] args){
		Bank bank1 = Bank.getInstance();
		Bank bank2 = Bank.getInstance();
		System.out.println(bank1 == bank2);//true
	}
}

//懒汉式
class Bank{
	//1.私有化类的构造器
	private Bank(){
	
	}
	//2.声明当前类的对象,没有初始化
	private static Bank instance = null;
	//3.声明public static的返回当前类对象的方法
	public static Bank getInstance(){
		if(instance == null){
            instance=new Bank();
        }
		return instance;
	}
}

三、模板方法的设计模式

1.解决的问题

在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。
但是某些部分易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。

2.举例

代码实现

abstract class Template{
	//计算某段代码执行所需要花费的时间
	public void spendTime(){
		long start = System. currentTimeMillis();
		this.code();//不确定的部分、易变的部分
		1ong end = System. currentTimeMillis();
		System.out.println("花费的时间为:+ (end - start));
	}
	public abstract void code();
}

class SubTemplate extends Template{
	@Override
	public void code() {
		for(int i = 2;i <= 1000;1++){
			boolean isFlag = true;
			for(int j = 2;j <= Math.sqrt(i);j++){
				if(i%j==0){
					isFlag = false;
					break;
				}
			}
			if(isFlag){
				System.out.println(i);
			}
		}
	}
}

3.应用场景

模板方法设计模式是编程中经常用得到的模式。各个框架、类库中都有他的影子,比如常见的有:

  • 数据库访问的封装
  • Junit单元测试
  • JavaWeb的Servlet中关于doGet/doPost方法调用
  • Hibernate中模板程序
  • Spring中JDBCTemlate、HibernateTemplate等

如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单例设计模式 的相关文章

  • 8086CPU中14个寄存器的详解

    CPU中的寄存器 在执行单元EU和总线接口单元BIU中一共有14个寄存器 xff0c 其中通用寄存器8个 标志寄存器FLAGS一个 控制寄存器5个 xff0c 其中指令队列虽然不是寄存器但也需要重点说明一下 xff1a 1 指令队列的工作原
  • 8086中的操作数

    指令中的操作数 指令的基本形式为 操作码 目标操作数 源操作数 xff0c 其中操作码代表了如何对数据进行操作 xff0c 目标操作数和源操作数分别代表了数据计算之后的归宿和数据的获取处 操作数本身是个数据 xff0c 但是数据的性质 xf
  • ROS中yaml文件编写格式

    目录 键值对 键值对书写格式 键值对的引用 强制类型转换 字符串 时间与日期 已知偏移时区和当地时间 已知UTC世界时间 数组 普通数组 键值对数组 数组的引用 多维数组 命名空间 命名空间下普通变量赋值方式 使用引用给命名空间下的变量赋值
  • ROS:rosbag命令行指令详解(一)

    目录 获取当前工作目录下bag文件的信息 在当前工作目录下创建bag文件 对指定话题进行录制 获取当前工作目录下bag文件的信息 1 以列表的方式显示bag文件的信息 xff1a 指令格式 xff1a rosbag info BagFile
  • ROS:rosbag play系列指令(详解)

    Rosbag play系列指令 Rosbag play bagFile01 bag bagFile02 bag 播放多个录制文件 xff1a 由于我们的bag录制文件并不是同一时间录制 xff0c 因此bag录制文件会因录制顺序不同播放顺序
  • Ubuntu22.04网卡丢失

    首先确保网卡设备名称能看到 xff0c 看不到 xff0c 以下步骤无意义 xff1a sudo lshw c network 2 命令行执行以下命令 xff1a sudo service NetworkManager stop sudo
  • Ubuntu22.04中ROS2的安装教程

    ROS2入门教程 在ubuntu22 04下apt安装ros2版本humble 创客智造 ncnynl com ROS Humble Ubuntu 22 04 Apt Install Issue ROS 答案 xff1a 开源问答论坛
  • git 使用

    一 安装 Git 1 从 Git 官网下载对应版本 xff0c 进行默认安装即可 2 安装完成后 xff0c 桌面右键点击 Git gt Git Bash xff0c 弹出命令行窗口 3 在命令行窗口输入 34 git config glo
  • Darknet中.cfg文件参数详解

    转载自 xff1a https blog csdn net phinoo article details 83022101 感谢博主分享 net xxx 开始的行表示网络的一层 xff0c 其后的内容为该层的参数配置 xff0c net 为
  • VS的路径变量[转]

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net peter teng article details 9716421 RemoteMachine 设置为 调试 属性页上 远
  • dockerfile定制jenkins+python+pytest+allure镜像步骤

    一 创建dockerfile文件 创建目录 mkdir jenkinsci dockerfile 进入目录 cd jenkinsci dockerfile 创建dockerfile文件 touch dockerfile 二 将依赖的文件或目
  • Mac上用Chrome,全屏后 关闭、缩小、最小化图标不见了,多了一条空白条,解决方法

    问题 xff1a Mac上用Chrome xff0c 全屏后移动鼠标到上方 xff0c 本来会有的关闭 缩小 最小化图标不见了 xff0c 多了一条空白条 解决方法 xff1a 快捷关闭全屏模式 xff1a command 43 contr
  • Linux-----信号量

    信号量 信号量原理信号量概念信号量函数基于环形队列的生产消费模型空间和数据资源生产者和消费者申请 释放信号量模拟实现基于环形队列的生产者消费者模型 信号量原理 之前我们知道被多个执行流同时访问的公共资源叫做临界资源 xff0c 而临界资源不
  • Linux操作系统 §3:基本命令Ⅱ(Bash常用功能,文件查询)

    本篇你将掌握的内容 xff08 文末有总结全图 xff09 xff1a 文章目录 3 0 引入3 1 补全命令 文件名 xff1a Tab键 3 2 查看文件 cat more3 2 1 cat concatenate 3 2 1 1 概念
  • 无人机自主导航 (realsense D430 vins 的安装与调试)

    realsense SDK的安装 https github com IntelRealSense librealsense blob master doc distribution linux md https github com Int
  • 无人机自主导航(ARM架构的vins-fusion-GPU部署)

    本文参考 GitHub arjunskumar vins fusion gpu tx2 nano Installation step of vins fusion gpu version on Nvidia Jetson TX2 amp N
  • TI电赛无人机

    一 材料准备 1 机架 xff08 F330机架便宜耐摔 xff0c 初期调试时使用 xff09 2 电调 xff08 好盈40A电调 xff09 3 电机 xff08 新西达 朗宇 xff09 4 桨叶 xff08 乾丰8045 xff0
  • 【Maven项目如何转换为Gradle项目】

    Idea中Maven工程如何转换为Gradle工程 打开Maven项目 修改settings中Maven的本地仓库 修改settings中项目的编码格式 4 刷新Maven的相应插件 5 在Idea中TerMinal输入 gradle in
  • Git版本控制的使用

    文章目录 一 Git的介绍1 版本控制2 Git与svn对比3 聊聊Git历史 二 Git的使用1 Git环境配置2 Git配置3 Git基本理论 xff08 核心 xff09 4 Git项目搭建5 Git文件操作 三 使用GitHub1
  • eclipse解决中文乱码问题

    eclipse运行页面显示中文乱码 页面源码 lt 64 page language 61 34 java 34 contentType 61 34 text html charset 61 ISO 8859 1 34 pageEncodi

随机推荐

  • YOLOv4:ubuntu18下使用darknet训练自己的模型

    首先 xff0c 如果使用GPU xff0c 确认你电脑的有关环境是否符合以下要求 xff1a CMake gt 61 3 12CUDA gt 61 10 0OpenCV gt 61 2 4cuDNN gt 61 7 0GPU with C
  • Java 基础常见面试题大全

    原因 焦虑 每次去面试更高的职位时候 xff0c 内心总是担忧着那些面试题怎么解答 很多问题在实际工作中并不会遇到 xff0c 没有实际的解决问题经验 xff0c 看过也记不住 让你的Java知识功底更加强悍 xff0c 后面的框架 xff
  • 集合框架(4):HashMap底层原理分析

    文章目录 一 Map接口中常用的方法二 Map接口继承树三 Map底层源码分析1 Map xff1a 2 Map中key value的理解 xff1a 3 面试题 四 HashMap底层源码分析1 在jdk7中2 在jdk8中3 JDK1
  • HashMap中对红黑树、CAS等知识的补充

    目录 一 红黑树1 概念2 图示3 红黑树的特性 二 解决哈希冲突常见方法1 开放定址法2 链接地址3 再哈希法4 建立公共溢出区 三 CAS1 定义2 操作3 Java中CAS操作4 存在的问题5 实际应用 一 红黑树 1 概念 是一种自
  • 集合框架(1):Collection | Iterator | 增强for

    文章目录 Collection接口一 集合框架的概述Collection接口继承树Collection接口中的方法的使用使用迭代器Iterator遍历Collection集合增强for循环遍历集合 文章链接Java语法https blog
  • 解决tomcat启动闪退问题

    通过自己的实践和查阅资料 xff0c 完美解决一下问题 分享给需要的朋友 遇到问题所在 tomcat启动后 xff0c 黑窗口一闪而过 原因分析 缺少JAVA HOME 或者缺少JRE HOME xff0c 说明你的环境变量不对 xff0c
  • 一维数组 | 二维数组 | 内存解析

    文章目录 一 数组1 数组的理解 xff1a 2 数组相关的概念 3 数组的特点 xff1a 4 数组的分类 xff1a 5 数据结构 xff1a 二 一维数组1 一维数组的声明与初始化2 一维数组元素的引用3 数组的属性 xff1a le
  • Java基本语法

    文章目录 关键字与保留字1 关键字2 保留字 标识符1 标识符2 定义合法标识符规则3 Java中的名称命名规范 变量1 变量的概念2 变量作用3 声明变量4 变量分类5 数据类型6 基本数据类型之间的运算 运算符程序流程控制1 顺序结构2
  • Java小型计算器

    通过对程序的编写 xff0c 可以不同位数实现对加减乘除的计算 xff0c 以及对错误答案给出提示 以满足一些大人给小孩出题的困惑 xff0c 此程序可以自己出题 xff0c 自己检测答案 随时随地想做就做 需求 xff1a 1 实现计算器
  • 杨辉三角 | 回形数 | 复制 | 赋值练习题

    目录 杨辉三角回形数格式方阵的实现使用简单数组拓展 xff1a 修改题目 xff0c 实现array2对array1数组的复制 杨辉三角 使用二维数组打印一个10行杨辉三角 span class token keyword public s
  • 水仙花数 | 平闰年 | 斐波那契数列 | 反转单词

    目录 水仙花1 三位数的水仙花2 四位数的水仙花 平闰年斐波那契数列反转句子中单词顺序 水仙花 1 三位数的水仙花 span class token keyword for span span class token punctuation
  • 图像去雾:AOD-Net

    论文地址 xff1a https arxiv org pdf 1707 06543 pdf 相关代码 xff1a GitHub MayankSingal PyTorch Image Dehazing PyTorch implementati
  • 打印三角形 | 所有素数

    目录 3 100的所有素数找出来5 5正方形直角三角形反直角三角形正等腰三角形 xff08 金字塔 xff09 倒立等腰三角形 4 61 1 1 1 3 43 1 5 1 7 43 1 9 1 11 43 43 1 n 若n为99 3 10
  • 冒泡排序 | 快速排序 | 线性查找 | 二分查找等

    目录 排序算法 xff1a 冒泡排序排序算法 xff1a 快速排序数组的复制 反转 查询 xff08 线性查找 二分查找 xff09 排序算法 xff1a 冒泡排序 span class token keyword public span
  • 多线程(1/2)

    文章目录 一 多线程概述1 概念1 1 程序 进程 线程1 2 单核cpu和多核cpu1 3 并行和并发 2 优点3 何时需要 二 继承Thread类1 多线程创建的方式一 xff1a 继承于Thread类2 线程常用方法3 线程的优先级4
  • 多线程(2/2)

    文章目录 一 程序安全的单例模式之懒汉式1 通过同步代码块解决懒汉式单例设计模式的线程安全问题2 通过同步方法解决懒汉式单例设计模式的线程安全问题 二 死锁问题1 死锁的理解 2 说明 三 Lock锁方式解决线程安全问题四 线程的通信1 涉
  • 集合框架(5):LinkHashMap | TreeMap | Properties | Collections工具类

    文章目录 一 LinkedHashMap底层实现原理二 TreeMap1 自然排序2 定制排序 三 Properties四 Collections 工具类1 工具类中常用的方法2 代码演示 文章链接Java语法https blog csdn
  • 集合框架(2):List | ArrayList | LinkedList | Vector的底层源码

    文章目录 一 list比较ArrayList LinkedList Vector三者的异同 xff1f List接口常用方法List遍历及常用方法总结 ArrayList源码分析LinkedList源码分析Vector源码分析ArrayLi
  • 集合框架(3):set | HashSet | LinkedHashSet | TreeSet的底层源码

    文章目录 一 Set练习题 xff1a 在list内去除重复数据值 二 HashSet三 LinkHashSet四 TreeSet1 自然排序2 定制排序 文章链接Java语法https blog csdn net weixin 45606
  • 单例设计模式

    目录 一 设计模式1 理解2 常用设计模式 23种经典的设计模式 二 单例设计模式1 概念 xff1a 2 如何实现 xff1f 3 饿汉式和懒汉式的区别4 应用场景 xff1a 三 模板方法的设计模式1 解决的问题2 举例3 应用场景 一