2013年(8)
分类: C/C++
2013-02-04 22:29:11
Prototype 模式
Prot otype 模式主要解决浅层拷贝和深层拷贝的问题,但是一般不是太差的程序员一般都可以避免这种错误。 个人认为它蕴含着一生二, 二生四的太极思想,
但是在c语言中怎么实现,有什么应用场景呢?
先给上代码
typedef char data_type;
typedef struct prototype
{
data_type *data;
int data_len;
void (*func)(void * data);
} prototype_t;
prototype_t * clone(prototype_t *proto_type)
{
prototype_t *new_type = NULL;
if (NULL == proto_type)
{
return NULL;
}
new_type = (prototype_t *)calloc(1, sizeof(prototype_t));
if (NULL == new_type)
{
return NULL;
}
new_type->data = calloc(proto_type->data_len, sizeof(data_type));
if (NULL == new_type->buffer)
{
free(new_type);
new_type = NULL;
return;
}
memcpy(new_type->data, proto_type->data, proto_type->data_len);
new_type->func = proto_type->func;
return new_type;
}
应用场景:
举个实际应用的例子,我们要把数据进行网上传输,要求如下
1、尽量少传输数据
2、认为TCP CRC 校验不可靠。
我们需要做如下操作
1、给数据压缩
2、给数重新算校验值
一般实现方式可以,先压缩再算校验值或者先算校验再压缩。但是如果需要尽可能加快速度完成压缩和校验的计算,那么我们可以将压缩和校验进行并行完成,这个时候prototype起作用了。 原始数据做压缩,clone数据做校验。 Prototype就起作用了
Prototype 模式:需要本尊和分身做不同的事情时,这个很有用