1.1单例模式初步(C++)

初步了解单例模式(代码)

//单例,要检查你是否实例化对象(单线程)
// 1-》如果已实例化对象,无需在实例化对象,只需返回原本的实例对象
//2-》如果没实例化对象,就实例化对象,拿到实例对象
#include<iostream>
using namespace std;
class Singleton {
//构造方法私有,防止其他方法实例化本类的对象,
// 只有本类的方法可以实例化对象,因为只有这样才可以访问本类私有的方法。
private:
	static Singleton* instance;//指针--作用--只是声明,并没有创造;
	Singleton() {

	}
public:
	//1->作用实例化一个对象,并放回
	// 
	// 
	//2->因为在main函数中,无法实例化对象,
	// 只能调用Singleton getInstance()方法,才能拿到对象,所以是静态的
	 static Singleton getInstance() {
		 if (instance == nullptr)
			 instance = new Singleton();
		/*Singleton s1;
		return s1;*/
		 return * instance;//静态方法只能访问静态属性,所以* instance一定是静态的
	}
};
Singleton* Singleton::instance = nullptr;
int main()
{

	Singleton::getInstance();
}

1. 什么是单例模式

单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性。

2.单例模式有三个关键点

  • 唯一性:确保只有一个实例被创建。
  • 全局访问:提供一个全局访问点来访问该实例。
  • 延迟加载:可以实现延迟加载,即在第一次使用时才创建实例对象,从而节省资源。
     

3.单例模式的优缺点

单例模式的优点包括但不限于:

  • 节约系统资源,避免重复创建对象。
  • 提供全局访问点,便于管理。
  • 可以控制实例的生命周期,确保资源被正确释放。

单例模式的缺点主要包括:

  • 可能违反“单一职责原则”,因为单例类既要负责自身的功能,又要负责管理实例的生命周期。
  • 可能难以扩展,因为单例类的实例被固定。
  • 在多线程环境下,如果没有正确的线程安全措施,可能会引发安全问题。
     

4.单例模式的实现方式

单例模式的实现方式主要有以下几种:

  • 饿汉式:在类加载时就完成了实例化,这种方式简单但可能造成资源浪费。
  • 懒汉式:在第一次使用时才进行实例化,可以实现延迟加载,但在多线程环境下可能需要额外的线程安全措施。
  • 双重检查锁定(DCL):通过两次检查实例是否存在的机制来确保单例的创建。
  • 静态内部类:利用静态内部类的方式来实现单例模式,可以做到线程安全和延迟加载。
  • 枚举:使用枚举类型来实现单例,这是 Java 5 之后推荐的实现方式,因为它更简洁、更安全、更优雅。
     

5.适用场景

单例模式的典型应用场景包括:

  • 全局配置信息的读取和管理。
  • 数据库连接池的管理。
  • 系统级别的工具类对象。
  • 日志记录器。
  • 线程池的控制。

综合分析

单例模式是一个非常基础且广泛使用的设计模式,它的核心在于确保类的实例唯一性和全局访问性。实现单例模式时,需要考虑线程安全、延迟加载等问题,并根据不同的应用场景选择合适的实现方式。在使用单例模式的过程中,要注意其潜在的缺点,如可能造成的职责过重和难以扩展,因此在设计时要充分理解单例模式的特点和适用场景,以便更有效地应用于实际开发中。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值