PoolManger模式
来源:互联网 发布:c语言顺序表的就地逆置 编辑:程序博客网 时间:2024/05/18 01:07
1、背景
在实际的软件开发中,存在一些宝贵的资源,如内存、线程、数据库的连接,而这些资源的使用在空间或者时间上对软件系统的性能、有时候我们在软件开发中需要不断的申请内存资源或者数据库链接,往往创建这些资源会占用整个操作的很大一部分时间,并且有时候会造成系统内存碎片等系统性能问题。为了提高系统的性能和稳定性,可以在使用前预先创建一部分资源,在使用的过程中将这些资源统一管理,在需要是进行申请分配,使用完之后归还系统,等后续操作的时候进行复用。
在创建和在创建对象比较昂贵,或者对于特定类型能够创建的对象数目有限制时,管理对象的重用,提高系统时间和空间上的效率。
2 实现:
当client需要使用对象资源的时候,通过PoolManger 对象的方法acquiredReusable()获取具体的对象资源Reusable,如果申请是资源池为空,则创建一个资源对象Reusable,否则等待资源对象Reusable被释放。当使用完资源之后通过releaseReusable()方法将资源归还给PoolManger 对象。
3、UML类图:
4、code实现
1)Reusable为需要复用资源的类 。
如下为简单的的一个sample,仅仅是为了进行演示PoolManger模式
#include<iostream>class Reusable{private:int m_index;public:Reusable(int index){m_index = index; } void PrinterIndex(){std::cout<<"index ="<<m_index<<std::endl;}};
2)PoolManger 为资源管理的类
避免使用中创建多个实例,通过单例模式来获取管理类,保证对象的唯一性。
#include <iostream>#include<string>#include<stdio.h>#include<list>#include"Reusable.h"class PoolManger{private: static PoolManger* m_PInstance;int m_maxsize;int m_index;std::list<Reusable*> m_ObjectPool;PoolManger(){ m_maxsize = 0; m_index = 0;}public:~PoolManger(){int i = 0;std::list<Reusable*>::iterator ite = m_ObjectPool.begin();while(ite != m_ObjectPool.end()){delete (*ite);--m_maxsize;}}Reusable* acquireReusable(){Reusable* pReusable = NULL;if(m_ObjectPool.empty() ){if(m_index >m_maxsize)return NULL;m_index ++;return new Reusable(m_index);}else{pReusable = m_ObjectPool.front();m_ObjectPool.pop_front();return pReusable;}}static PoolManger* getInstance() // get singleton{if( m_PInstance == NULL)m_PInstance = new PoolManger; std::cout<<"creat instance"<<std::endl;return m_PInstance;}void releaseReusable(Reusable* Reusable){m_ObjectPool.push_back(Reusable);}void setMaxPoolSize(int max_size){m_maxsize = max_size;}};
可以通过PoolManger来统一管理资源对象的分配和创建,这样一方面可以提高资源对象的使用率,另一方面也会避免由于重复创建导致时间和空间的性能问题。
- PoolManger模式
- PoolManger模式(二)
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 卓越亚马逊推荐机制的学习和探讨
- 软件工程文档模板----五、详细设计说明书
- 如何删除以横线“-”开头的文件
- 网易有道IP, 手机号, 身份证号归属地查询API接口
- VS 2008 SP1 选择工具箱时 自动关闭
- PoolManger模式
- Hadoop 实战之运行AveragingWithCombiner
- hdu 4310 简单贪心
- Axis2 WebService WSDL
- 互联网协议入门
- 开始学Java了
- 《擒爱记》 观后感
- 程序迷写木马横扫全国套钱1000多万 网警惊叹是天才
- android 获得一个应用程序的启动次数,运行时间等信息