当前位置: 首页 > news >正文

java单例设计模式

1.什么是设计模式

1.静态方法和属性的静态使用
2.设计模式是在大量的实践中总结和理论化之后优选的代码节后、编程风格以及解决问题的思考方式。设计模式就像是经典的汲取,不同的棋局,我们用不同的棋谱,免去我们自己在思考的和摸索。

2.单例设计模式

1.所谓单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得器对象实例的方法。
步骤:

  • 1.将构造器私有化
  • 2.在类的内部直接创建
  • 3.提供一个公共的static方法 返回gf对象

2.单例模式有两种方式,1)饿汉式 2)懒汉式

2.1 饿汉式

类一加载就创建对象,对象还没使用的时候就已经创建了对象。

package com.xxg.lean.single_;public class GirlFriend {private static String name;//为了能够在静态方法中可以访问,所以加static修饰private static GirlFriend gf = new GirlFriend("xxg");/*** 如何保证我们只有一个对象呢?* 步骤[饿汉式]* 1.将构造器私有化* 2.在类的内部直接创建* 3.提供一个公共的static方法 返回gf对象* @param name*/private  GirlFriend(String name) {this.name = name;}public static GirlFriend getInstance() {return gf;}@Overridepublic String toString() {return "GirlFriend+name+" + name;}
}

2.2 懒汉式

饿汉式通常是类加载了,对象就创建了,可能对象没有使用,这就造成了浪费,为了解决这个问题,所以出现了懒汉式

步骤:

  • 1.构造器私有化
  • 2.定义一个static静态属性对象
  • 3.提个一个public的static方法,可以返回一个车Cat对象
package com.xxg.lean.single_;public class SingleTest02 {public static void main(String[] args) {System.out.println(Cat.n1);Cat instance = Cat.getInstance();System.out.println(instance);}}
class Cat {private String name;public static int n1 = 10;private static Cat cat;/*** 步骤* 1.构造器私有化* 2.定义一个static静态属性对象* 3.提个一个public的static方法,可以返回一个车Cat对象*/private Cat(String name) {this.name = name;}public static Cat getInstance(){if (cat == null){cat = new Cat("xxg");}return cat;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +'}';}
}

总结:饿汉式vs懒汉式

  • 饿汉式和懒汉式的主要区别是创建迭代的时机不同,饿汉式是在类加载贾创建了对象实例,而懒汉式是在使用时才创建了对象实例
  • 饿汉式不存在线程安全问题,懒汉式存在线程安全问题(后续补充)
  • 饿汉式存在资源浪费的可能,如果一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建对象,就不存在这个问题
http://www.dtcms.com/a/275402.html

相关文章:

  • Leet code 每日一题
  • 基于随机森林的金融时间序列预测系统:从数据处理到实时预测的完整流水线
  • FreeRTOS—动态创建与删除任务实战;静态创建与删除任务实战
  • ubuntu18.04 升级Ubuntu 20.04
  • 外设数据到昇腾310推理卡 之一
  • Linux进程管理的核心:task_struct中的双链表与网状数据结构
  • 【攻防实战】记一次DC2攻防实战
  • 【Linux仓库】虚拟地址空间【进程·陆】
  • DVWA靶场通关笔记-XSS DOM(Low级别)
  • 力扣-19. 删除链表的倒数第N个节点
  • 前端内容-ES6
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • 虚拟现实的镜廊:当技术成为存在之茧
  • AI之DL之VisualizationTool:ai-by-hand-excel的简介、安装和使用方法、案例应用之详细攻略
  • 生成式对抗网络(GAN)模型原理概述
  • 用 Python 将分组文本转为 Excel:以四级词汇为例的实战解析
  • Socket到底是什么(简单来说)
  • HTTP和HTTPS部分知识点
  • w460实习生管理系统
  • Linux中Gitee的使用
  • 【小沐杂货铺】基于Three.JS绘制汽车展示Car(WebGL、vue、react、autoshow、提供全部源代码)
  • vue3 el-table动态表头
  • vite如何生成gzip,并在服务器上如何设置开启
  • tp8.0\jwt接口安全验证
  • Ubuntu快速搭建QT开发环境指南,5000字解析!!
  • 自动化证书续签工具针对VPS服务器HTTPS服务的维护实践
  • windows电脑远程win系统服务器上的wsl2
  • 企业选择大带宽服务器租用的原因有哪些?
  • 北京企业纷纷“借兵”:揭秘软件人力外包走俏的四大真相
  • 9. JVM垃圾回收