设计模式:单例模式(Singleton)

I2C通信协议SCL与SDA引脚特性:核心要点总结 深入讲解I2C通信协议中SCL和SDA引脚的工作机制与电气特性,帮助理解i2c通信协议的稳定传输原理,掌握上拉电阻配置与信号时序控制要点。 阅读详情

设计模式:单例模式(Singleton)

单例模式(Singleton)属于创建型模式(Creational Pattern)的一种。

创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。

创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

模式动机

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。

关键代码:构造函数是私有的。

应用实例:

  1. 一个班级只有一个班主任。
  2. Windows 是多进程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
  3. 一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
  4. 一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个主键编号,否则会出现主键重复,因此该主键编号生成器必须具备唯一性,可以通过单例模式来实现。

在以下情况下可以使用单例模式:

  1. 系统只需要一个实例对象,如系统要求提供一个唯一的序列号生成器,或者需要考虑资源消耗太大而只允许创建一个对象。
  2. 客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。
  3. 在一个系统中要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就需要对单例模式进行改进,使之成为多例模式。

模式定义

单例模式(Singleton)涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类称为单例类,提供一个全局访问点来访问该实例,不需要实例化该类的对象。

注意:

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

模式结构

在这里插入图片描述

时序图

在这里插入图片描述

模式实现

类的实例化方式有两种:构造函数、拷贝构造函数。我们将其设置为私有方法,便可以防止其在类外创建实例化对象。

将构造函数设置为私有方法,并不会影响静态成员在类外创建,因为他们同属于一个类域,可以访问类的所有成员。

饿汉模式

不管需不需要用,提前创建好对象 instance。

Singleton.h:

class Singleton
{
private:
	static Singleton instance; // 声明静态成员变量
	Singleton() {}
	Singleton(const Singleton& singleton) = delete; // 删除拷贝构造函数
	Singleton& operator=(const Singleton& singleton) = delete; // 删除赋值构造函数

public:
	~Singleton() {}
	// 静态方法访问静态成员
	static Singleton* getInstance()
	{
		return &instance;
	}
	// 成员函数
	void singletonOperation();
};

Singleton.cpp:

#include "Singleton.h"
#include <iostream>

// 在 C++ 中,静态成员变量需要在某个地方进行定义和初始化,以便链接器能够找到它。如果你只声明了静态成员变量而没有提供定义,就会出现以下错误:
// error LNK2001: 无法解析的外部符号 "private: static class Singleton Singleton::instance" (?instance@Singleton@@0V1@A)
Singleton Singleton::instance;

void Singleton::singletonOperation()
{
	std::cout << "singletonOperation" << std::endl;
}

上述代码通过静态成员 instance 实现单例类,原理就是函数的静态变量生命周期随着进程结束而结束。

这种方式比较常用,但容易产生垃圾对象。

懒汉模式 - 线程不安全

用的时候再通过 new 申请。

Singleton.h:

class Singleton
{
private:
	static Singleton* pInstance; // 声明静态成员变量
	Singleton() {}
	Singleton(const Singleton&) = delete; // 删除拷贝构造函数
	Singleton& operator=(const Singleton&) = delete; // 删除赋值构造函数

public:
	~Singleton()
	{
		delete pInstance;
	}
	static Singleton* getInstance()
	{
		if (pInstance == nullptr) // 判断是否第一次调用
		{
			pInstance = new Singleton();
		}
		return pInstance;
	}
	// 成员函数
	void singletonOperation();
};

Singleton.cpp:

#include "Singleton.h"
#include <iostream>

// 在 C++ 中,静态成员变量需要在某个地方进行定义和初始化,以便链接器能够找到它。如果你只声明了静态成员变量而没有提供定义,就会出现以下错误:
// error LNK2001: 无法解析的外部符号 "private: static class Singleton Singleton::instance" (?instance@Singleton@@0V1@A)
Singleton* Singleton::pInstance = nullptr;

void Singleton::singletonOperation()
{
	std::cout << "singletonOperation" << std::endl;
}

getInstance() 使用懒惰初始化,也就是说它的返回值是当这个函数首次被访问时被创建的。

在懒汉式的单例类中,其实有两个状态,单例未初始化和单例已经初始化。假设单例还未初始化,有两个线程同时调用getInstance方法,这时执行 pInstance == nullptr 肯定为真,然后两个线程都初始化一个单例,最后得到的指针并不是指向同一个地方,不满足单例类的定义了,所以懒汉式的写法会出现线程安全的问题!在多线程环境下,要对其进行修改。

懒汉模式 - 线程安全

引入互斥锁,实现对getInstance内临界区的互斥访问。采用DCLP(double-check-locking-pattern)模式,使得不必每次调用都需要加锁,提高了效率。

Singleton.h:

#include <mutex>
class Singleton
{
private:
	static Singleton* instance; // 声明静态成员变量
	int value;
	static std::mutex _mutex; // 互斥锁,用于线程安全

	Singleton(int x);
	Singleton(const Singleton&) = delete; // 删除拷贝构造函数
	Singleton& operator=(const Singleton&) = delete; // 删除赋值构造函数

public:
	~Singleton();
	static Singleton* getInstance(int);
	// 成员函数
	void singletonOperation();
	void printAddr() const;
	void printValue() const;
};

Singleton.cpp:

#include "Singleton.h"
#include <iostream>
using namespace std;
// 在 C++ 中,静态成员变量需要在某个地方进行定义和初始化,以便链接器能够找到它。如果你只声明了静态成员变量而没有提供定义,就会出现以下错误:
// error LNK2001: 无法解析的外部符号 "private: static class Singleton Singleton::instance" (?instance@Singleton@@0V1@A)
Singleton* Singleton::instance = nullptr;
// 初始化互斥锁
mutex Singleton::_mutex;

Singleton::Singleton(int x = 0) : value(x) {
	cout << "Create Singleton" << endl;
}

Singleton::~Singleton()
{
	cout << "Destroy Singleton" << endl;
}

Singleton* Singleton::getInstance(int x = 0)
{
	if (instance == nullptr) // 判断是否第一次调用
	{
		_mutex.lock();
		//lock_guard<mutex> lock(mutex_);
		if (instance == nullptr)
		{
			instance = new Singleton(x);
		}
		_mutex.unlock();
	}
	return instance;
}



void Singleton::singletonOperation()
{
	cout << "singletonOperation" << endl;
}

void Singleton::printAddr() const
{
	cout << "address is " << this << endl;
}

void Singleton::printValue() const
{
	std::cout << "value is " << value << std::endl;
}

单例模式在单线程环境下的测试

测试代码 main.cpp:

#include <iostream>
#include <stdlib.h>
#include "Singleton.h"
using namespace std;

int main()
{
    Singleton* sg = Singleton::getInstance();
    sg->singletonOperation();

    cout << "s1 addr is " << Singleton::getInstance() << endl;
    cout << "s2 addr is " << Singleton::getInstance() << endl;


    system("pause");
    return 0;
}

饿汉模式

运行结果:

在这里插入图片描述

程序首先取得了一个实例,使用了它的一个成员函数。才取两次实例,分别打印它们的地址,可以看到地址相同,说明实例是唯一的。

懒汉模式

测试函数 main.cpp 和之前的一样,结果也一样。

测试结果

单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。

无论饿汉还是懒汉,在单线程环境下都是一心一意的痴汉。两种实现在单线程下都是安全的。

那么,多线程呢?

单例模式在多线程环境下的测试

测试代码 main.cpp:

#include <iostream>
#include <stdlib.h>
#include <thread>
#include "Singleton.h"
using namespace std;

void func1()
{
	Singleton* s1 = Singleton::getInstance(1);
	s1->printAddr();
	s1->printValue();
}

void func2()
{
	Singleton* s2 = Singleton::getInstance(2);
	s2->printAddr();
	s2->printValue();
}

int main()
{
	thread t1(func1); 
	thread t2(func2);
	t1.join();
	t2.join();
	system("pause");
	return 0;
}

饿汉模式

运行结果:

在这里插入图片描述

懒汉模式 - 线程不安全

运行结果:

在这里插入图片描述

懒汉模式 - 线程安全

运行结果:

在这里插入图片描述

测试结果

饿汉模式在多线程环境下也是安全的。

但线程不安全的懒汉模式出现了错误,加上互斥锁以后才能在多线程环境下正确运行。

单例模式的优缺点

优点:

  1. 提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它,并为设计及开发团队提供了共享的概念。
  2. 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。
  3. 避免对资源的多重占用(比如写文件操作)。
  4. 允许可变数目的实例。我们可以基于单例模式进行扩展,使用与单例控制相似的方法来获得指定个数的对象实例。

缺点:

  1. 没有接口,不能继承。由于单例模式中没有抽象层,因此单例类的扩展有很大的困难。
  2. 单例类的职责过重,在一定程度上违背了“单一职责原则”。因为单例类既充当了工厂角色,提供了工厂方法,同时又充当了产品角色,包含一些业务方法,将产品的创建和产品的本身的功能融合到一起。
  3. 滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;现在很多面向对象语言(如Java、C#)的运行环境都提供了自动垃圾回收的技术,因此,如果实例化的对象长时间不被利用,系统会认为它是垃圾,会自动销毁并回收资源,下次利用时又将重新实例化,这将导致对象状态的丢失。
SAP Single Sign-On 全景指南:从传统 SAP SSO 到 SAP Secure Login Service for SAP GUI 的架构、场景与迁移实践 本文系统梳理了SAP生态下的单点登录技术方案,重点分析了SAP GUI的云化替代方案SAP Secure Login Service(SLS)。内容涵盖SNC、Kerberos/SPNEGO、SAML 2.0等核心协议的技术实现,对比了传统SAP SSO与新型SLS for SAP GUI的架构差异,并给出AS ABAP系统的具体实施路径。针对SAP GUI访问、浏览器访问Fiori/移动端等不同场景,提供了详细的协议选型建议和配置指南,帮助团队构建安全可靠且适应云时代的统一认证体系。 阅读详情

相关推荐

先进封装基础知识

想象一下,芯片就像是电脑或手机的大脑,但它非常脆弱,需要被保护起来。芯片封装就是给芯片穿上一件“保护衣”,这件“保护衣”不仅可以保护芯片,还能帮助芯片与外部世界进行沟通。

阿拉伯梳子的专栏 1145

Golang 设计模式系列1:单例模式 (Singleton Design Pattern)

单例模式(Singleton Design Pattern) 单例模式顾名思义,会提供给用户一个对象(object)的实例(instance) ,并且保证这个实例全局唯一。 单列模式的应用场景很多,比如: 当你想用同一个链接来访问数据库的时候 当你用一个ssh 链接服务器并执行一些命令,但你不想每次都重开ssh的时候 当你想要限制访问某些资源的时候 目标 我们考虑在需要应用以下规则时使用Sin...

weixin_36417972的博客 307

从工艺文件到寄生分析:手把手教你用华大九天RCExplorer做版图预检(附ITF文件解析)

本文详细介绍了华大九天RCExplorer工具在模拟IC和版图设计中的应用,从工艺文件解析到寄生参数提取的全流程。通过ITF文件的深度解析和实战案例,帮助工程师掌握金属层、介质层及通孔参数的关键影响,提升设计效率与准确性。文章还提供了与StarRC工作流集成的实用技巧,是国产EDA工具应用的权威指南。

weixin_42522552的博客 408

设计模式:单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是一种创建型设计模式,它的核心思想是:保证在一个进程中,某个类仅有一个实例,并提供全局访问点。

TechNomad的博客 1456

Android13 CarPowerManagementService启动流程分析

在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。

liuning1985622的博客 957

深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积

深度可分离卷积不用多说,在轻量级网络架构方面是一个绕不开的话题,只要接触深度学习多多少少会接触。深度可分离卷积即DepthwiseSeparableConvolution,该卷积将一个常规卷积过程划分成两个完成Depthwise卷积和Pointwise卷积,在保证输出一样时,计算量大大降低。首先来看,一个常规卷积是怎么实现的。其示意图如果我们从通道数变换的角度来看,卷积就是将3通道的tensor变为了4通道的tensor,我们来看看深度可分离卷积是怎么实现通道的变化的。...

xu.hyj 1万+

设计模式4:Singleton Pattern (单例模式)

原文:http://www.cnblogs.com/zhenyulu/articles/37246.html参考于:http://www.dofactory.com/Patterns/PatternSingleton.aspx一、 单例(Singleton)模式单例模式的特点:单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其它对象提供这一实

薛敬明的专栏 2835

手把手入门YOLO到改进优化教程 | 【P5进阶篇】YOLOv8损失函数改进实战-损失函数IoU之KLD Loss

在本节,将从 KLD Loss(Kullback–Leibler Divergence Loss)的理论到实战代码实现,带你把 KLD Loss融合进 YOLOv8 的训练框架中。并通过训练日志与实验结果,验证 KLD Loss 在实际工程中的优势。

嵌入式阿齐Archie 2万+

实践GoF设计模式:Singleton Pattern 单例模式

前言 我们在开发项目中,经常会遇到这种情况,为了节约所拥有的系统资源或数据的一致性时,需要保证系统中的某个类中有且只有唯一的一个实例,而且在其创建成功之后,我们将不能再次创建同类型的其他对象,也就是所有的操作都要以这个唯一的实例为中心,所以为了保证对象所具有的的唯一性,单例模式成为我们所具备的方法 概念 ● 设计模式中单例模式是最为简单的形式之一,而且是使用最广泛的设计模式之一,其目的是为了将类的一个对象成为系统中的唯一实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享 ● 要想实现这一点,可以

m0_70748458的博客 402

Android 12.0 SystemUI下拉状态栏定制化之隐藏下拉通知栏布局功能实现(二)

在12.0的系统定制化开发中,由于从12.0开始SystemUI下拉状态栏和11.0的变化比较大,所以可以说需要从新分析相关的SystemUI的 布局,然后做分析来实现不同的功能,今天就开始实现关于隐藏SystemUI下拉状态栏中的通知栏布局系列二,去掉下拉状态栏中 通知栏部分 白色的圆角背景

安卓兼职framework和app工程师的博客 1636

UNET改进77:全网首发-添加CFBlock |

本文介绍了在UNet模型中集成CFBlock注意力机制的实现方法。主要分为三个步骤:1) 创建CFBlock模块,包含卷积注意力机制和MLP;2) 在UNet连接处添加注意力模块;3) 在卷积层中嵌入注意力机制。具体实现包括:定义Conv、MLP和ConvolutionalAttention等基础模块,构建CFBlock核心结构;在UNet跳跃连接处插入注意力模块;将注意力机制整合到DoubleConv和Down模块中。该方法通过在不同位置引入注意力机制,可有效提升模型的特征提取能力。代码实现使用PyTor

AIcurator的博客 388

设计模式教程:单例模式(Singleton Pattern)

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

遇见伯灵说的博客 1276

基于 OpenCVSharp 的晶圆缺口自动检测与旋正方案

在半导体制造过程中,晶圆(Wafer)需要精确定位才能进行后续加工。每个晶圆边缘都有一个特定的缺口,这个缺口就像 "箭头" 一样,帮助机器确定晶圆的方向。我们的任务就是通过摄像头拍摄的图片,自动找到这个缺口的位置,计算出需要旋转多少角度才能让晶圆对准正确方向。简单来说,这个技术就像给晶圆 "找方向",确保它在生产线上始终保持正确的姿态。

品质生活,极致编程。 1211

《Java设计模式指南》01:单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是最简单的设计模式之一,属于创建型模式,它提供了一种访问某个类“唯一实例(对象)”的绝佳方式,且可以直接访问,不需要再次实例化该类。 单例模式涉及到一个单一的类,该类负责创建自己的实例,同时确保只有单个实例被创建。通常情况下,该类在一个进程中只有一个实例,有些时候根据业务需要,在一个线程中只有一个实例,例如,仅线程上下文中使用同一个实例。因此,该类被称之为单例类,其唯一实例叫做单例。

西安极客联盟 809

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

设计模式之一:单例模式(Singleton Pattern)

写这个系列的文章,只为把所学的设计模式再系统的整理一遍。错误和不周到的地方欢迎大家批评。点击这里下载源代码。 什么时候使用单例模式 在程序运行时,某种类型只需要一个实例时,一般采用单例模式。为什么需要一个实例?第一,性能,第二,保持代码简洁,比如程序中通过某个配置类A读取配置文件,如果在每处使用的地方都new A(),才能读取配置项,一个是浪费系统资源(参考.NET垃圾回收机制),再...

131

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java设计模式:单例模式【Singleton Pattern】

 单例模式很简单,就是在构造函数中多了加一个构造函数,访问权限是 private 的就可以了,这个模式是简单,但是简单中透着风险,风险?什么风险?在一个 B/S 项目中,每个 HTTPRequest 请求到 J2EE的容器上后都创建了一个线程,每个线程都要创建同一个单例对象。 /** * I'm glad to share my knowledge with you all. * 中国

Lee_my_的专栏 887

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++ 设计模式:单例模式(Singleton Pattern)

C++ 设计模式:单例模式(Singleton Pattern)

冀晓武的博客 922

设计模式精讲 Day 1:单例模式(Singleton Pattern)

单例模式是一种创建型设计模式,它确保一个类在整个应用程序中只存在一个实例,并提供一个全局访问该实例的方法。限制类的实例化次数,仅允许创建一次。提供一个全局访问点,方便其他对象获取该实例。今天我们详细讲解了单例模式,包括它的定义、结构、适用场景、多种实现方式、工作原理、优缺点、真实案例以及与其他模式的关系。单例模式的核心思想;Java中不同实现方式的优劣;如何在实际项目中使用单例模式;单例模式在Java标准库和框架中的应用。下一天,我们将进入“设计模式精讲”的第二天,讲解。

在未来等你的专栏 1140

深度解析设计模式:单例模式(Singleton Pattern)

核心定义:单例模式通过私有化构造函数,并在类内部控制实例的创建过程,强制外界只能通过特定方法获取该实例。设计动机:在软件系统中,某些资源(如数据库连接池、线程池、配置管理器、日志对象)往往只需要一个实例。如果创建多个实例,会导致资源浪费、数据一致性冲突或系统行为异常。优先选型:若无特殊需求,首选静态内部类或枚举实现。原则权衡单例模式在一定程度上违反了单一职责原则(它既负责业务逻辑,又负责管理自身的生命周期)。单例模式难以扩展(违反开闭原则),且在单元测试中难以被 Mock。架构建议。

l3345973813的博客 599

Android 设计模式入门到精通之一:单例模式(Singleton Pattern)

设计模式项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,代码设计模式&框架设计实现不妥之处,请帮忙指正),谢谢! 单例模式(Singleton Pattern) 一、概念及技术背景 Ensure a class has only one instance, and pro...

caobaokang的专栏 1050

设计模式 Day 1:单例模式(Singleton Pattern)详解

设计模式学习不在于一蹴而就,而在于持续积累与反复思考。本篇作为设计模式学习计划的第一天内容,旨在通过结构化讲解帮助读者牢牢掌握单例模式的核心思想与使用方法。后续每日将采用“”的方式推进,这样开篇,一方面帮助读者快速回忆 Day 1,另一方面也自然引出了 Day 2 的学习重点。

Interview_TC的博客 602

设计模式详解:单例模式(Singleton Pattern)

单例模式是软件开发中常用的一种创建型的设计模式,核心目标是确保一个类在一个系统中只有一个实例。单例模式看似简单,但背后涉及类加载机制、线程安全、JVM 内存模型、反射、序列化等多个 Java 核心知识点。掌握它,不仅能写出高质量代码,还能在面试中脱颖而出。

weixin_63108234的博客 512

架构系列——架构师必备基础:设计模式之单例模式(Singleton Pattern)

目录 前言 一、单例模式优点 1.减少内存开支 2.避免状态切换时的不正确 二、单例模式的实现与选择 1.单例模式的实现 2.怎么选择单例模式 三、单例模式破解 1.1通过反射破解 1.2解决方法 2.1 通过序列化与反序列化破解 2.2解决方法 四、单例模式的应用 前言 单例模式,就是在整个应用程序中都只有一个实例,并且提供一个类方法来供全局调用,在编译期间会一...

前方一片光明 5510

java23种设计模式之一: 单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是设计模式中比较常用的一种,下面来总结单例模式的知识,包括: 1、理解什么是单例模式、单例模式有什么优点/缺点、单例模式的应用场景; 2、再来看看Java单例模式的6种代码实现方式、每种实现方式有什么需要注意的; 3、后面再来了解Java单例模式其他值得关注的地方,如比较静态方法、以及Java反...

255

设计模式(一):单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是设计模式中常用的一种,知识点包括:1、理解什么是单例模式、单例模式有什么优点/缺点、单例模式的应用场景;2、再来看看Java单例模式的6种代码实现方式、每种实现方式有什么需要注意的;3、后面再来了解Java单例模式其他值得关注的地方,如比较静态方法、以及Java反射、反序列化、垃圾回收的影响等。

tjiyu的博客 1万+

设计模式:创建型模式:单例模式(singleton pattern)

下面的内容主要来自于了 1)深入浅出设计模式 by AI92 2)http://www.jellythink.com/archives/82 (这篇讲的特别深) 单例模式的目的: 保证一个类有且仅有一个对象,并提供一个访问这个对象的全局访问点。 通常单例模式适合用于表示具有唯一性的对象,比如文件系统、资源管理器等。 单例模式的实现方法: 为了限制创建对象的个数,而且要

世界是兔子的 688
上一篇: 设计模式:UML 类图
下一篇: 设计模式:观察者模式(Observer)
UestcXiye
博客等级 码龄8年 9031粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值