博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
享元(FlyWeight)模式
阅读量:4965 次
发布时间:2019-06-12

本文共 2246 字,大约阅读时间需要 7 分钟。

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。

 代码:

 

#include 
#include
#include
#include
using namespace std;class Shape{public: virtual void draw() = 0; virtual ~Shape(){}};class Circle : public Shape{public: Circle(string color, int x=0, int y=0, int radius=0) :_color(color), _x(x), _y(y), _radius(radius){} void setX(int x) { _x = x; } void setY(int y) { _y = y; } void setRadius(int radius) { _radius = radius; } void set(int x, int y) { _x = x; _y = y; } virtual void draw() { cout << "Draw circle [color:" << _color << ", at(" << _x<< ","<< _y << "), radius("<< _radius << ")]" << endl; }private: int _x; int _y; int _radius; string _color; //内部状态};class CircleFactory{public: CircleFactory() { _map.clear(); } Circle *getCircle(string color) { if (_map.find(color) == _map.end()) { int x, y; x = getRandomXY(); y = getRandomXY(); Circle *c = new Circle(color, x, y); c->setRadius(100); _map[color] = c; return c; } return _map[color]; } ~CircleFactory() { for (auto it = _map.begin(); it != _map.end(); ++it) { delete it->second; } } int getRandomXY() { return rand() % 100; } int getCricleCount() { return _map.size(); } string getRandomColor() { static string colors[] = { "red", "Green", "blue", "white", "black", "purple", "yellow", "orange"}; static int len = sizeof(colors) / sizeof(*colors); int index = rand() % len; return colors[index]; } private: map
_map;};void test(){ srand(time(NULL)); CircleFactory cf; Circle *c = NULL; for (int i = 0; i < 10; ++i) { string color = cf.getRandomColor(); c = cf.getCircle(color); c->draw(); }}int main(){ test(); cin.get(); return 0;}

 

 效果:

 

转载于:https://www.cnblogs.com/hupeng1234/p/6798289.html

你可能感兴趣的文章
Spark与Spring集成做web接口
查看>>
Web jquery表格组件 JQGrid 的使用 - 11.问题研究
查看>>
Ubuntu下如何访问Windows磁盘?
查看>>
Rabbitmq安装及启动 MAC系统
查看>>
nginx location配置
查看>>
在DELPHI中动态创建控件以及控件的事件(转)配合 让FIREDAC记录数据库的异常日志...
查看>>
WordPress程序文件说明
查看>>
6.6410和210的按键中断编程
查看>>
PHP处理数组和XML之间的互相转换
查看>>
办公室文员、助理都可以学学,留着迟早用得着!
查看>>
使用httpModule做权限系统
查看>>
aiohttp异步爬虫爬取当当网最热书籍并导出excel
查看>>
奇异矩阵(转载)
查看>>
打飞机
查看>>
MVC3.0 中Razor 学习
查看>>
<转> mysql处理高并发,防止库存超卖
查看>>
[18/11/29] 继承(extends)和方法的重写(override,不是重载)
查看>>
Numpy基础操作笔记
查看>>
How can I add a new user as sudoer using the command line?
查看>>
UI的设计,适配器,以及RecyclerView无法加载的解决办法
查看>>