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

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

2012-03-02 15:10 351 查看
模板对于学习C++的同学,其实并不陌生。函数有模板函数,类也有模板类。那么这个模板模式是个什么情况?我们可以思考一下,模板的本质是什么。比如说,现在我们需要编写一个简单的比较模板函数。

[cpp]
view plaincopyprint?

template <typename type>
int compare (type a, type b)
{
return a > b ? 1 : 0;
}

[cpp]
view plaincopyprint?

class basic

{
public:
void basic() {}
virtual ~basic() {}

virtual void step1() {}

virtual void step2() {}

void process()
{
step1();
step2();
}
};

class basic
{
public:
void basic() {}
virtual ~basic() {}
virtual void step1() {}
virtual void step2() {}
void process()
{
step1();
step2();
}
};
basic的类说明了基本的流程process是唯一的,所以我们要做的就是对step1和step2进行改写。

[cpp]
view plaincopyprint?

class data_A : public basic

{
public:
data_A() {}
~data_A() {}
void step1()
{
printf("step 1 in data_A!\n");

}

void step2()

{
printf("step 2 in data_A!\n");

}
};

[cpp]
view plaincopyprint?

typedef struct _Basic

{
void* pData;

void (*step1) (struct _Basic* pBasic);

void (*step2) (struct _Basic* pBasic);

void (*process) (struct _Basic* pBasic);

}Basic;

typedef struct _Basic
{
void* pData;
void (*step1) (struct _Basic* pBasic);
void (*step2) (struct _Basic* pBasic);
void (*process) (struct _Basic* pBasic);
}Basic;
因为在C++中process函数是直接继承的,C语言下面没有这个机制。所以,对于每一个process来说,process函数都是唯一的,但是我们每一次操作的时候还是要去复制一遍函数指针。而step1和step2是不同的,所以各种方法可以用来灵活修改自己的处理逻辑,没有问题。

[cpp]
view plaincopyprint?

void process(struct _Basic* pBasic)

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