设计模式C++实现:单例模式(Singleton)
2016-01-19 13:21
666 查看
一、定义:Ensure a class has only one instance , and provide a global point of access to it.(确保其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
二、类图:
三、代码实例:
四、优缺点:
优点:
1.内存中只有一个实例,减少内存开销。
2.减少反复创建销毁的性能开销。
3.只有一个全局访问点,优化和共享资源访问。
缺点:
1.没有其他接口,扩展困难。
2.需要对多线程处理,增加开销。
二、类图:
三、代码实例:
#include <pthread.h> class Mutex { public: Mutex() { pthread_mutex_init(&_lock, NULL); } virtual ~Mutex() { pthread_mutex_destroy(&_lock); } void Lock() { pthread_mutex_lock(&_lock); } void Unlock() { pthread_mutex_unlock(&_lock); } private: pthread_mutex_t _lock; }; class ScopedLock { public: ScopedLock( Mutex& mutex_obj ) : _mutex_obj(mutex_obj) { _mutex_obj.Lock(); } ~ScopedLock() { _mutex_obj.Unlock(); } private: Mutex& _mutex_obj; }; template < class _Type > class Singleton { public: static _Type* GetInstance() { if ( NULL == _instance() ) { ScopedLock lock( _mutex() ); if (NULL == _instance()) { _instance() = new _Type(); } } } static void DestroyInstance() { if ( _instance()) { ScopedLock lock( _mutex() ); delete _instance(); _instance() = NULL; } } protected: static _Type* & _instance() { static _Type* p = NULL; return p; } static Mutex & _mutex() { static Mutex m; return m; } };
四、优缺点:
优点:
1.内存中只有一个实例,减少内存开销。
2.减少反复创建销毁的性能开销。
3.只有一个全局访问点,优化和共享资源访问。
缺点:
1.没有其他接口,扩展困难。
2.需要对多线程处理,增加开销。
相关文章推荐
- php设计模式之单例模式实例分析
- PHP基于单例模式实现的数据库操作基类
- JavaScript编程的单例设计模讲解
- C#设计模式之单例模式实例讲解
- JS模式之单例模式基本用法
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- .NET c# 单体模式(Singleton)
- Java单例模式、饥饿模式代码实例
- Android源码学习之单例模式应用及优点介绍
- C++设计模式之单例模式
- C#窗口实现单例模式的方法
- Java线程安全中的单例模式
- PHP单例模式详细介绍
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
- php实现singleton()单例模式实例
- PHP中数据库单例模式的实现代码分享
- php利用单例模式实现日志处理类库
- 浅析php单例模式
- php单例模式实现方法分析
- 三种单例模式与Object祖先类