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

Java进阶学习笔记5——Static应用知识:单例设计模式

设计模式:

架构师会使用到设计模式,开发框架,就需要掌握很多设计模式。

在Java基础阶段学习设计模式,将来面试笔试的时候,笔试题目会经常靠到设计模式。

将来会用到设计模式。框架代码中会用到设计模式。

什么是设计模式?(design pattern)

一个问题经常会有n种解法,其中肯定有一种解法是最优的,这种优的解法被人总结出来了,称之为设计模式。

设计模式就是具体问题的最优解决方法。

设计模式有20多种,对应20多种软件开发中会遇到的问题。

关于设计模式的学习,主要学什么?

解决什么问题?

怎么写?

主要学这两点就行了。

单例设计模式:

确保一个类只有一个对象。

写法:

1)把类的构造器私有;

2)定义一个类变量记住类的一个对象;

3)定义一个类方法,返回对象。

package cn.ensource.d6_singleinstance;public class A {// 定义一个类变量记住类的一个对象private static A a = new A();// 私有构造器private A() {}// 定义一个类方法返回类对象public static A getInstance() {return a;}
}

测试类:

package cn.ensource.d6_singleinstance;public class Test1 {public static void main(String[] args) {// 目标:掌握单例设计模式的方法A a1 = A.getInstance();A a2 = A.getInstance();System.out.println(a1);System.out.println(a2);}
}

运行结果:

单例设计模式有什么应用场景和好处?

Runtime类就是典型的单例类,Runtime就是程序的运行环境,Java程序运行的时候只有一个运行环境,因此Runtime只需要一个对象,所以就做成了单例类。

任务管理器也是一个单例模式的例子:

无论我启动多少次任务管理器,任务管理器只有一个。一台电脑只需要一个任务管理器,启动多个任务管理器,界面都是一样,只需要一个即可。所以就设计成单例模式。

在这些业务场景下,使用单例模式,避免浪费内存。

单例设计模式的实现方式很多:

饿汉式单例:拿对象时,对象已经创建好了。

懒汉式单例模式:

拿对象的时候,才开始创建对象(延时加载对象)。

写法:

1)把类的构造器私有。

2)定义一个类变量用于存储对象;

3)提供一个类方法,保证返回的是同一个类对象。

package cn.ensource.d6_singleinstance;public class B {// 2. 定义一个类变量,用于存储这个类的一个对象,这个时候没有创建对象private static B b;// 1. 私有构造器,对外就不能创建对象了private B() {}// 3. 定义一个类方法,这个方法要保证第一次调用才创建一个对象,后面调用时都会用同一个对象返回public static B getInstance() {// 第一次,就是b对象还没创建为空nullif (b == null) {b = new B();}return b;}
}
package cn.ensource.d6_singleinstance;public class Test2 {public static void main(String[] args) {// 目标:掌握懒汉式单例模式B b1 = B.getInstance();System.out.println(b1);B b2 = B.getInstance();System.out.println(b2);}
}

运行结果:

如果单例对象使用的不是很频繁,就使用懒汉式单例模式。

如果使用的很频繁,就是饿汉式单例模式。

http://www.lryc.cn/news/356851.html

相关文章:

  • Vue 前端加框 给div加红色框框 js实现
  • Percona Toolkit 神器全攻略(实用类)
  • ARM GIC 和NVIC的区别
  • CSS文本粒子动画特效之爱心粒子文字特效-Canvas
  • 小熊家务帮day5 客户管理模块1 (小程序认证,手机验证码认证等)
  • Blender 学习笔记(一)快捷键记录
  • ubuntu linux (20.04) 源码编译cryptopp库 - apt版本过旧
  • 机器学习-3-特征工程的重要性及常用特征选择方法
  • QGis3.34.5工具软件保存样式,软件无反应问题
  • JavaScript(ES6)入门
  • 深入分析 Android Activity (十)
  • 考试“挂了“用日语怎么说,柯桥商务日语培训
  • 【机器学习300问】103、简单的经典卷积神经网络结构设计成什么样?以LeNet-5为例说明。
  • 【代码随想录算法训练营第37期 第二十一天 | LeetCode530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先】
  • 2023 年网络等级保护考试题库及答案
  • springboot集成nacos
  • NoSQL数据库技术与应用 教学设计
  • 比较(一)利用python绘制条形图
  • 【面试】Oracle JDK和Open JDK什么关系?
  • 科学技术创新杂志科学技术创新杂志社科学技术创新编辑部2024年第10期目录
  • ES数据导出成csv文件
  • 结构型设计模式之装饰模式
  • Java - 当年很流行,现在已经淘汰的 Java 技术,请不要在继续学了!!!
  • 驻波比VSWR
  • 多线程-线程池
  • 护网期间遇到的几个上传bypass waf、edr
  • 简述MVC模式
  • C#--Mapster(高性能映射)用法
  • mysql实战——Mysql8.0高可用之双主+keepalived
  • 关于同一个地址用作两个不同页面时,列表操作栏按钮混淆状态