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

本文介绍了单例模式的应用场景,包括Windows任务管理器、回收站、网站计数器等,并探讨了其优缺点。同时提供了简单的单例模式实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用场景:

1. WindowsTask Manager(任务管理器)就是很典型的单例模式

2. windowsRecycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。

3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。

4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

5. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

6. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。

优点:

1、适用于任何类:只需把一个类的构造函数变成私有的,并且在其中增加相应的静态函数和变量,就可以把这个类变为singleton。

2、可以通过派生创建:给定一个类,可以创建它的一个singleton子类。

3、延迟求值:如果singleton从未使用过,那么就绝不会创建它。

缺点:

1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。

2、单例类的职责过重,在一定程度上违背了“单一职责原则”。

3、滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。

简单实现:

#include <iostream>

#include <string>

#include <vector>

using namespace std;

class Singelton

{

private:

Singelton(){}//构造函数是私有的

staticSingelton* singel;

public:

staticSingelton* GetInstance()

{

if(singel== NULL)

{

singel= new Singelton();

}

returnsingel;

}

Singelton* Singelton::singel = NULL;//注意静态变量类外初始化

客户端:

int main()

{

Singelton*s1=Singelton::GetInstance();

Singelton*s2=Singelton::GetInstance();

if(s1== s2)

cout<<"ok"<<endl;

else

cout<<"no"<<endl;

return0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值