概述
享元模式在实现形式上与单例有点类似,不同的是它扩展到了多个对象,通过共享的方式来减少相同对象创建的数量,达到提高性能、改善结构的目的。
代码实例
class pen{
public:
pen(string _color):color(_color){}
void draw(){
std::cout<<"I'm a "<<color<<" pen, and length="
<<length<<",radius="<<radius<<std::endl;
}
void SetLength(int len){
length=len;
}
void SetRadius(int r){
radius=r;
}
private:
int length;
int radius;
string color;
}
class pen_box{
public:
pen* GetPen(string color){
if(pens.find(color)==pends.end())
pens[color]=new pen(color);
return pens[color];
}
private:
unordered_map<string,pen*> pens;
}
当需要使用某种颜色的pen时,直接从pen_box的get接口取出,如此可以保证一些对象被重复使用而不会每次都被反复创建和析构。