【设计模式】—— 单例模式Singleton
时间:2022-04-22
本文章向大家介绍【设计模式】—— 单例模式Singleton,主要内容包括模式意图、模式结构、使用场景、代码结构、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
模式意图
保证类仅有一个实例,并且可以供应用程序全局使用。为了保证这一点,就需要这个类自己创建自己的对象,并且对外有公开的调用方法。
模式结构
Singleton 单例类,内部包含一个本身的对象。并且构造方法时私有的。
使用场景
当类只有一个实例,而且可以从一个固定的访问点访问它时。
代码结构
【饿汉模式】通过定义Static 变量,在类加载时,静态变量被初始化。
1 package com.xingoo.eagerSingleton;
2 class Singleton{
3 private static final Singleton singleton = new Singleton();
4 /**
5 * 私有构造函数
6 */
7 private Singleton(){
8
9 }
10 /**
11 * 获得实例
12 * @return
13 */
14 public static Singleton getInstance(){
15 return singleton;
16 }
17 }
18 public class test {
19 public static void main(String[] args){
20 Singleton.getInstance();
21 }
22 }
【懒汉模式】
1 package com.xingoo.lazySingleton;
2 class Singleton{
3 private static Singleton singleton = null;
4
5 private Singleton(){
6
7 }
8 /**
9 * 同步方式,当需要实例的才去创建
10 * @return
11 */
12 public static synchronized Singleton getInstatnce(){
13 if(singleton == null){
14 singleton = new Singleton();
15 }
16 return singleton;
17 }
18 }
19 public class test {
20 public static void main(String[] args){
21 Singleton.getInstatnce();
22 }
23 }
- 过滤器第二篇【编码、敏感词、压缩、转义过滤器】
- JSP第二篇【内置对象的介绍、4种属性范围、应用场景】
- Struts2的配置和一个简单的例子
- 监听器第一篇【基本概念、Servlet各个监听器】
- 监听器第二篇【统计网站人数、自定义session扫描器、踢人小案例】
- 通俗易懂的分析如何用Python实现一只小爬虫,爬取拉勾网的职位信息
- JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】
- 一条执行时间两天半的sql语句简化(r4笔记第62天)
- 05-01总结方法,数组(一维)
- 02 Java类的加载机制
- 权限管理系统
- 03 JVM的垃圾回收机制
- Tomcat就是这么简单
- Servlet第三篇【request和response介绍、response的常见应用】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 记一次线上问题及反思
- 用 Redis 散列实现短网址生成器|文末福利
- 原创|面试官:Java对象一定分配在堆上吗?
- 频繁FGC的真凶原来是它
- 类加载器知识点吐血整理
- ThreadPoolExecutor 线程池"源码分析"
- 一起刷 leetcode 之螺旋矩阵(头条和美团真题)
- 如何快速判断一个用户是否访问过我们的 APP?
- replication-manager之switchover剖析
- 组复制安装部署 | 全方位认识 MySQL 8.0 Group Replication
- 提升低端设备的 Web 性能
- TypeScript 4.0 RC发布,带来诸多更新
- istio mcp实现探究
- K8S 生态周报| Helm v2 进入维护期倒计时
- Halcon实例转OpenCV:计算回形针方向