C语言和设计模式(享元模式)
2011-12-26 22:26
447 查看
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
享元模式看上去有点玄乎,但是其实也没有那么复杂。我们还是用示例说话。比如说,大家在使用电脑的使用应该少不了使用WORD软件。使用WORD呢, 那就少不了设置模板。什么模板呢,比如说标题的模板,正文的模板等等。这些模板呢,又包括很多的内容。哪些方面呢,比如说字体、标号、字距、行距、大小等等。
这里的GetFont即使对当前的Font进行判断,如果Font存在,那么返回;否则创建一个新的Font模式。
享元模式看上去有点玄乎,但是其实也没有那么复杂。我们还是用示例说话。比如说,大家在使用电脑的使用应该少不了使用WORD软件。使用WORD呢, 那就少不了设置模板。什么模板呢,比如说标题的模板,正文的模板等等。这些模板呢,又包括很多的内容。哪些方面呢,比如说字体、标号、字距、行距、大小等等。
typedef struct _Font { int type; int sequence; int gap; int lineDistance; void (*operate)(struct _Font* pFont); }Font;上面的Font表示了各种Font的模板形式。所以,下面的方法就是定制一个FontFactory的结构。
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; }
相关文章推荐
- C语言和设计模式(享元模式)
- C语言和设计模式(享元模式)
- 13、C语言和设计模式(享元模式)
- C语言和设计模式(享元模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(享元模式) 12
- C语言设计模式:享元模式
- 设计模式之享元模式(Flyweight)
- C语言设计模式-封装-继承-多态
- c++设计模式之享元模式
- PHP设计模式12-享元模式
- Java设计模式(5)共享模式/享元模式(Flyweight模式)
- 设计模式——享元模式
- 设计模式之享元模式,C++实现
- 设计模式之享元模式(2)
- 设计模式之二十二:享元模式(FlyWeight)
- 设计模式C++实现(9)——享元模式
- Java设计模式百例 - 享元模式
- 设计模式——享元模式(FlyWeight)
- 设计模式(11)-结构型-享元模式(Flyweight)
- 二十二、享元模式——设计模式学习笔记