13、C语言和设计模式(享元模式)
来源:互联网 发布:魔法王座各种升阶数据 编辑:程序博客网 时间:2024/05/16 05:00
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
上面的Font表示了各种Font的模板形式。所以,下面的方法就是定制一个FontFactory的结构。
享元模式看上去有点玄乎,但是其实也没有那么复杂。我们还是用示例说话。比如说,大家在使用电脑的使用应该少不了使用WORD软件。使用WORD呢, 那就少不了设置模板。什么模板呢,比如说标题的模板,正文的模板等等。这些模板呢,又包括很多的内容。哪些方面呢,比如说字体、标号、字距、行距、大小等等。
- typedef struct _Font
- {
- int type;
- int sequence;
- int gap;
- int lineDistance;
- void (*operate)(struct _Font* pFont);
- }Font;
- typedef struct _FontFactory
- {
- Font** ppFont;
- int number;
- int size;
- Font* GetFont(struct _FontFactory* pFontFactory, int type, int sequence, int gap, int lineDistance);
- }FontFactory;
这里的GetFont即使对当前的Font进行判断,如果Font存在,那么返回;否则创建一个新的Font模式。
- Font* GetFont(struct _FontFactory* pFontFactory, int type, int sequence, int gap, int lineDistance)
- {
- int index;
- Font* pFont;
- Font* ppFont;
- if(NULL == pFontFactory)
- return NULL;
- for(index = 0; index < pFontFactory->number; index++)
- {
- if(type != pFontFactory->ppFont[index]->type)
- continue;
- if(sequence != pFontFactory->ppFont[index]->sequence)
- continue;
- if(gap != pFontFactory->ppFont[index]->gap)
- continue;
- if(lineDistance != pFontFactory->ppFont[index]->lineDistance)
- continue;
- return pFontFactory->ppFont[index];
- }
- pFont = (Font*)malloc(sizeof(Font));
- assert(NULL != pFont);
- pFont->type = type;
- pFont->sequence = sequence;
- pFont->gap = gap;
- pFont->lineDistance = lineDistance;
- if(pFontFactory-> number < pFontFactory->size)
- {
- pFontFactory->ppFont[index] = pFont;
- pFontFactory->number ++;
- return pFont;
- }
- ppFont = (Font**)malloc(sizeof(Font*) * pFontFactory->size * 2);
- assert(NULL != ppFont);
- memmove(ppFont, pFontFacoty->ppFont, pFontFactory->size);
- free(pFontFactory->ppFont);
- pFontFactory->size *= 2;
- pFontFactory->number ++;
- ppFontFactory->ppFont = ppFont;
- return pFont;
- }
0 0
- 13、C语言和设计模式(享元模式)
- C语言和设计模式(享元模式)
- C语言和设计模式(享元模式)
- C语言和设计模式(享元模式)
- 14.C语言和设计模式(享元模式)
- C语言设计模式:享元模式
- C语言和设计模式(享元模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- 设计模式(13)--享元模式
- 13、C语言和设计模式(命令模式)
- Java语言设计模式之享元模式(Flyweight)
- C#--设计模式之享元模式
- C语言和设计模式
- C语言和设计模式
- C语言和设计模式
- 设计模式(三)结构模式和行为模式(代理模式、享元模式)(观察者模式、命令模式)
- C语言和设计模式(之单件模式)
- C语言和设计模式(之原型模式)
- C语言和设计模式(之组合模式)
- Poj 3687 Labeling Balls (逆向Topo)
- 黑马程序员————java基础之Io一
- JSP之九大内置对象
- HDU 5294--Tricks Device【最小割 && 最短路处理,新建图】
- 聚集索引与非聚集索引
- 13、C语言和设计模式(享元模式)
- acm hdu p2054
- 模式识别技术漫谈
- java编写Http消息头
- Error:Unable to start the daemon process: could not reserve enough space for object heap.
- 再谈Qt实现Rasdial拨号问题(说说项目中遇到的问题和解决方案)
- HDU 1396 Counting Triangles
- Linux下安装Eclipse及解决谷歌被墙无法更新SDK问题
- 今天一天都在忙论文的事情,所以今天没时间来学习c++,那就给大家带来一个简单小程序杨辉三角把