单例模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。
单例模式单例模式也叫单件模式,在单例模式中,构造函数应该在private中,限制只能在类内创建对象。
1. 单例类保证全局只有一个唯一实例对象。
2. 单例类提供获取这个唯一实例的接口。
实现单例模式的思路:一个类能返回对象一个引用(永远是一个)和一个获得该实例的方法(必须是静态方法),构造函数为私有的,其它初的代码就无法通过类的构造函数来实例化类的对象,只能通过类提供的静态方法获得类的唯一实例。
下面是一个简单的单例类:
不考虑线程安全的一个单例类
class Singleton { public: // 获取唯一对象实例的接口函数 static Singleton* GetInstance() { if (_sInstance ==NULL) { _sInstance = new Singleton(); } return _sInstance; } // 删除实例对象 staticvoid DelInstance() { if (_sInstance) { delete _sInstance; _sInstance =NULL; } } void Print() { cout<<_data<<endl; } private: // 构造函数定义为私有,限制只能在类内创建对象 Singleton() :_data(0) {} Singleton(const Singleton&); Singleton&operator=(const Singleton&); // 指向实例的指针定义为静态私有,这样定义静态成员函数获取对象实例 static Singleton*_sInstance; // 单例类里面的数据 int _data; }; Singleton* Singleton::_sInstance =NULL; void TestSingleton() { Singleton::GetInstance()->Print(); Singleton::DelInstance(); }
优点:1、在单例模式中,活动的单例只有一个实例,对单例类的所有实例化都得到相同的一个实例,防止其他对象对自己的实例化,确保所有对象都访问一个实例。
2、由于系统内存中只存放一个对象,因此可以节约系统资源,当需要频繁创建和销毁对象时,单例模式可以提供系统性能。
3、避免对共享资源的多重占用。
缺点:1、不适用与多变的对象,如果同一类型的对象总是在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
2、由于单例模式没有抽象层,因此单例类的扩展有很大困难。
3、如果实例化的对象长时间不能被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
单例模式的使用场景:
1、资源共享的境况下,避免由于资源操作时导致的性能或损耗等。
2、控制资源的情况下,方便资源之间的互相通信。
应用场景举例:
打印机;Windows的TaskMangage(任务管理器);Windows的RecycleBin(回收站);网站的计数器;
以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章