您的位置:首页 > 理论基础 > 计算机网络

C语言和设计模式(享元模式) 【文章都是来自网络,只要自己吸取了就是自己的】

2012-03-02 15:28 357 查看
享元模式看上去有点玄乎,但是其实也没有那么复杂。我们还是用示例说话。比如说,大家在使用电脑的使用应该少不了使用WORD软件。使用WORD呢, 那就少不了设置模板。什么模板呢,比如说标题的模板,正文的模板等等。这些模板呢,又包括很多的内容。哪些方面呢,比如说字体、标号、字距、行距、大小等等。

[cpp]
view plaincopyprint?

typedef struct _Font
{
int type;
int sequence;
int gap;
int lineDistance;

void (*operate)(struct _Font* pFont);

}Font;

[cpp]
view plaincopyprint?

typedef struct _FontFactory

{
Font** ppFont;
int number;
int size;

Font* GetFont(struct _FontFactory* pFontFactory, int type, int sequence, int gap, int lineDistance);

}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模式。

[cpp]
view plaincopyprint?

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐