设计模式--单例模式

简介: 设计模式--单例模式

@[toc]

什么是单例

保证一个类只有一个实例,并且提供一个访问该全局访问点

1.Windows的Task Manager(任务管理器)就是很典型的单例模式
2.windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例
3.数据库连接池,线程池,spring(默认单例模式)都是单例

为什么要设计成单例 ?单例的好处?优缺点?

**单例好处:节约内存,只有一个实例,重复利用,方便管理
缺点:线程安全问题
**

单例创建方式

**1.饿汉式:类初始化时,会立即加载该对象,线程天生安全,调用效率高。
2.懒汉式: 类初始化时,不会初始化该对象,真正需要使用的时候才会创建该对象,具备懒加载功能。
3.静态内部方式:结合了懒汉式和饿汉式各自的优点,真正需要对象的时候才会加载,加载类是线程安全的。

4.枚举单例: 使用枚举实现单例模式 优点:实现简单、调用效率高,枚举本身就是单例,由jvm从根本上提供保障!避免通过反射和反序列化的漏洞, 缺点没有延迟加载。**

1.饿汉式实现

在这里插入图片描述

2.懒汉式实现

在这里插入图片描述

3.枚举创建单例

枚举--定义常量,天生具备JVM保障单例,一般项目定义常量

package com.dimple.Design;

public class SinEnum {

    private SinEnum(){

    }

    public static SinEnum getInstance() {
        return sinEnumPattern.INSTANCE.getInstance();
    }

    private static enum sinEnumPattern {
        INSTANCE;
        // 枚举元素为单例
        private SinEnum sinEnum;

        private sinEnumPattern() {
            sinEnum = new SinEnum();
        }

        public SinEnum getInstance() {
            return sinEnum;
        }
    }

    public static void main(String[] args) {
        SinEnum u1 = SinEnum.getInstance();
        SinEnum u2 = SinEnum.getInstance();
        System.out.println(u1 == u2);
    }
}

在这里插入图片描述

如何选择单例创建方式

如果不需要延迟加载单例,可以使用枚举或者饿汉式,相对来说枚举性好于饿汉式。
如果需要延迟加载,可以使用静态内部类或者懒韩式,相对来说静态内部类好于懒韩式。

相关文章
|
30天前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
61 0
|
1月前
|
设计模式 缓存 安全
【设计模式】单例模式:确保类只有一个实例
【设计模式】单例模式:确保类只有一个实例
23 0
|
3月前
|
设计模式 数据库连接 数据库
发挥设计模式单例模式的力量:从技术到社会的转变
发挥设计模式单例模式的力量:从技术到社会的转变
|
3月前
|
设计模式 安全 Java
设计模式-单例模式
设计模式-单例模式
38 0
|
1月前
|
设计模式 安全 Java
设计模式之单例模式
设计模式之单例模式
|
3月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
39 0
|
10天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
15 1
|
1月前
|
设计模式 存储 缓存
设计模式之单例模式(C++)
设计模式之单例模式(C++)
22 2
|
1月前
|
设计模式 安全 Java
Java设计模式之单例模式
在软件工程中,单例模式是一种常用的设计模式,其核心目标是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。Java作为一门广泛使用的编程语言,实现单例模式是面试和实际开发中的常见需求。
66 9
Java设计模式之单例模式
|
2月前
|
设计模式 存储 安全
【设计模式】创建型模式之单例模式(Golang实现)
【2月更文挑战第3天】一个类只允许创建一个对象或实例,而且自行实例化并向整个系统提供该实例,这个类就是一个单例类,它提供全局访问的方法。这种设计模式叫单例设计模式,简称单例模式。
34 1