Day31【概念解析】单例模式
行业概念

Day31【概念解析】单例模式

· 约 1,632 字 · 阅读约 9 分钟
目录

概念定义

中文名称:单例模式/单态模式/单件模式

英文名称:singleton pattern

复述展开

What is Singleton?

概念延申:单例(singleton )在不同领域的概念?

在科学技术领域下:

  • 数学领域

  • 计算机领域

  • 社会科学领域

📌 singleton,用人话说就是,作为名词时,在某个特定领域,只有一类的事物,可以是政府机构、辅音、人;作为形容词时,表示某样事物在某种特定领域下,有且只有一个,具有全局或者当前的唯一性。

What is Singleton Pattern

单例模式是一种创建型的设计模式,通过使用单例模式,可以保证一个类在某个场景下,有且只有一个实例存在,作为全局唯一的节点。

Why is Singleton Pattern

为什么要设计?

  1. 最常见的原因是控制某些共享资源 (例如数据库或文件) 的访问权限。

  2. 保证用户访问都是同一个资源。

单例模式架构

image

所有单例的实现都包含以下两个相同的步骤:

  • 将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符。

  • 新建一个静态构建方法作为构造函数。 该函数会 “偷偷” 调用私有构造函数来创建对象, 并将其保存在一个静态成员变量中。 此后所有对于该函数的调用都将返回这一缓存对象。

如果你的代码能够访问单例类, 那它就能调用单例类的静态方法。 无论何时调用该方法, 它总是会返回相同的对象。

代码实现

更多Java实现的单例模式:Java Singleton Design Pattern Best Practices with Examples | DigitalOcean

单线程单例模式

多线程单例模式

线程安全的单例模式

懒汉模式

package com.journaldev.singleton;

public class LazyInitializedSingleton {

    private static LazyInitializedSingleton instance;

    private LazyInitializedSingleton(){}

    public static LazyInitializedSingleton getInstance() {
        if (instance == null) {
            instance = new LazyInitializedSingleton();
        }
        return instance;
    }
}

饥汉模式


public class EagerInitializedSingleton {

    private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();

    // private constructor to avoid client applications using the constructor
    private EagerInitializedSingleton(){}

    public static EagerInitializedSingleton getInstance() {
        return instance;
    }
}

理解体会

单例模式使用在各种语言中都非常常见,像Java中的logging,thread pool。

虽然单例模式很常见,但是它实际上被很多开发者认为是反模式,因为违反了单一职责原理。所以现在,在一些语言中,也在慢慢减少使用单例模式。

在具体使用上,如何需要对共享变量(数据库、文件管理)进行使用,可以使用单例模式,全局共享同一个。

相关文章