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 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?
void process(struct _Basic* pBasic)
{
pBasic->step1(pBasic);
pBasic->step2(pBasic);
}
[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);
}
相关文章推荐
- C语言和设计模式(抽象工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(迭代器模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(命令模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(享元模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(访问者模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(装饰模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(继承、封装、多态) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(-)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(策略模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(建造者模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(之单件模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(桥接模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(之组合模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(备忘录模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(责任链模式)【文章都是来自网络,只要自己吸取了就是自己的】
- 改进卷积神经网络,你需要这14种设计模式(转载自机器之心微信号,mark一下当自己网络训练不好时可以看看)
- C++实现网络服务器命令模式(设计及模板实现)
- 解读设计模式----模板方法模式(Template Method),电脑就是这样造出来的
- 追MM和23中设计模式(来自网络)