Java设计模式超详解--单例设计模式(含uml图)

一,初步理解

图片来源:菜鸟教程

如图所见,单例设计模式就是确保一个类只有一个实例

如现在的图中就是:

SingleObiect中只有一个实例,如果想得到这个唯一的实例,则需要

SingletonPatternDemo通过调用SingleObject.getInstance()

SingleObiect返回唯一的实例instanceSingletonPatternDemo

单例模式分为懒汉式和饿汉式,接下来为大家详细介绍

二,上题目

要求定义一个类A,该类A只能被实例化为一个唯一的对象!

本题对应的公共类和main函数定义如下:

java 复制代码
public class Main {
    public static void main(String[] args) {
        A o1 = A.getInstance();
        A o2 = A.getInstance();
        if (o1.equals(o2)) {
            System.out.println("o1与o2是同一个对象!");
        }
    }
}

请完成A类的代码

显而易见,这里的Main 类就上述通用类图中的SingletonPatternDemo

那我们要完成的就是SingleObiect,也就是题目需要的A类啦

为大家分别介绍懒汉式和饿汉式:

理解懒汉式

为什么叫懒汉呢?先看代码:

java 复制代码
class A {
    // 1. 声明静态实例,但不立即初始化(懒加载)
    private static A instance;
    
    // 2. 私有化构造方法
    private A() {}
    
    // 3. 静态获取方法:首次调用时才创建实例
    public static A getInstance() {
        if (instance == null) { // 判空:为空才创建
            instance = new A();
        }
        return instance;
    }
}

可以看出,平时对instance是不管的,声明一个就放在那

要用的时候才懒洋洋的new一个对象

所以是懒汉式

关键:懒汉式怎么实现唯一实例的呢?

3个方面:

|---------------------------------------------------------------------------------|---------------------------|
| java private static A instance java public static A getInstance() | 声明静态实例与静态方法,不允许后续修改逻辑 |
| java private A() {} | 私有构造方法,不允许另外的对象创建 |
| java if (instance == null) { instance = new A(); } | 非空不创建,保证只有一个实例 |


理解饿汉式

依旧先看代码

java 复制代码
// 单例模式(饿汉式)实现,保证唯一实例
class A {
    // 1. 私有化静态实例:类加载时就创建唯一实例,保证全局唯一
    private static final A instance = new A();
    
    // 2. 私有化构造方法:禁止外部通过new创建实例
    private A() {}
    
    // 3. 公共静态方法:提供全局访问点,返回唯一实例
    public static A getInstance() {
        return instance;
    }
}

可以看出,与懒汉不同,饿汉一开始就迫不及待创建实例,显然是饿了

所以是饿汉式

关键:饿汉式怎么实现唯一实例的呢?

3个方面:

|-------------------------------------------------------------------------------------------------|---------------------------------------|
| java private static final A instance = new A() java public static A getInstance() | 私有化静态实例:类加载时就创建唯一实例,保证全局唯一(final) |
| java private A() {} | 私有构造方法,不允许另外的对象创建 |
| | |

三,总结

单例模式(Singleton Pattern)

意图

确保一个类只有一个实例,并提供一个全局访问点来访问该实例。

主要解决

频繁创建和销毁全局使用的类实例的问题。

何时使用

当需要控制实例数目,节省系统资源时。

如何解决

检查系统是否已经存在该单例,如果存在则返回该实例;如果不存在则创建一个新实例。

关键代码

构造函数是私有的。

设计模式系列持续更新,欢迎关注博主~

希望对大家有用,祝您开心~(o゜▽゜)o☆,有问题欢迎交流,俺会改的✊

相关推荐
rolt6 分钟前
[幻灯片]分析设计高阶-02结构(2)-202604更新
ddd·架构师·uml·ooad
c++之路25 分钟前
C++20概述
java·开发语言·c++20
Championship.23.2430 分钟前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮44 分钟前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken1 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步1 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿1 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
one_love_zfl2 小时前
java面试-微服务组件篇
java·微服务·面试
一只大袋鼠2 小时前
Java进阶:CGLIB动态代理解析
java·开发语言
环流_2 小时前
HTTP 协议的基本格式
java·网络协议·http