设计模式——单例模式

简介: 如果想让某个类只能创建一个对象,我们可以把它设置成单例模式。

1.单例模式的分类

(1)饿汉单例模式

(2)懒汉单例模式


2.介绍饿汉单例模式、懒汉单例模式

饿汉单例模式:还没获取对象的时候,实例对象就已经产生了,一定是线程安全的。

懒汉单例模式:不是线程安全的,需要通过锁+双重判断进行线程安全控制。


3.代码实现

饿汉单例模式:

#include <iostream>usingnamespacestd;
classSingleton{
public:
staticSingleton*getInstance()//3.获取唯一实例对象的方法    {
if (instance==nullptr)
        {
instance=newSingleton;
        }
returninstance;
    }
private:
staticSingleton*instance;//2.定义一个唯一的实例对象Singleton()//1.构造函数私有化    {
    }
Singleton(constSingleton&) =delete;
Singleton&operator=(constSingleton&) =delete;
};
Singleton*Singleton::instance{ nullptr };
intmain(void)
{
Singleton*p1=Singleton::getInstance();
Singleton*p2=Singleton::getInstance();
Singleton*p3=Singleton::getInstance();
return0;
}

线程安全的懒汉单例模式:

#include <iostream>#include <mutex>usingnamespacestd;
mutexmtx;
classSingleton{
public:
staticSingleton*getInstance()//3.获取唯一实例对象的方法    {
lock_guard<mutex>guard(mtx);
if (instance==nullptr)
        {
if (instance==nullptr)
            {
/*开辟内存给instance赋值构造对象*/instance=newSingleton;
            }
        }
returninstance;
    }
private:
staticSingleton*instance;//2.定义一个唯一的实例对象Singleton()//1.构造函数私有化    {
    }
Singleton(constSingleton&) =delete;
Singleton&operator=(constSingleton&) =delete;
};
Singleton*Singleton::instance{ nullptr };
intmain(void)
{
Singleton*p1=Singleton::getInstance();
Singleton*p2=Singleton::getInstance();
Singleton*p3=Singleton::getInstance();
return0;
}


相关文章
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
31 2
|
15天前
|
设计模式 存储 前端开发
前端必须掌握的设计模式——单例模式
单例模式是一种简单的创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。适用于窗口对象、登录弹窗等场景,优点包括易于维护、访问和低消耗,但也有安全隐患、可能形成巨石对象及扩展性差等缺点。文中展示了JavaScript和TypeScript的实现方法。
|
21天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
21 2
|
1月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
38 4
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
26天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
1月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
22 1
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
27 0
|
2月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和复用性的关键技术之一。本文将通过探讨单例模式,一种最常用的设计模式,来揭示其在PHP中的应用及优势。单例模式确保一个类仅有一个实例,并提供一个全局访问点。通过实际案例,我们将展示如何在PHP项目中有效实现单例模式,以及如何利用这一模式优化资源配置和管理。无论是PHP初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和技巧,进而提升自己的编程实践。
|
2月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy&lt;T&gt;` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
66 1