[设计模式]_[中级]_[模板方法C++例子实现举例]
2013-03-03 21:21
746 查看
场景:
1.有时候设计框架时定义了一套执行流程,比如定义了某个局部流程是分析文件的。但是可能根据不同有不同的分析方法,输出到统一模型里。常见的实现是根据if语句判断不同的文件再调用不同的函数来实现。也有可能有些开发人员直接在if语句体里实现。这样不统一的实现可能会造成代码难以维护,又容易出错,影响别人写好的实现。这时候如果定义了一套实现模板,开发人员只需要实现不同的子类系统即可自动识别判断。这样模块化的思想好处就是模块可以动态删除增加。
比如使用vector<Module>来存储模块.v.add(module),开发人员实现了一个模块之后,告诉负责加载模块的人员add(module)即可,又不会影响别人的代码,又解耦合,维护方便,增加模块又方便。
加载模块的人员只需要没觉这个vector并调用相应的模板方法即可实现动态处理。听明白的童鞋吼一声。^-^
test_method_template.cpp
输出:
1.有时候设计框架时定义了一套执行流程,比如定义了某个局部流程是分析文件的。但是可能根据不同有不同的分析方法,输出到统一模型里。常见的实现是根据if语句判断不同的文件再调用不同的函数来实现。也有可能有些开发人员直接在if语句体里实现。这样不统一的实现可能会造成代码难以维护,又容易出错,影响别人写好的实现。这时候如果定义了一套实现模板,开发人员只需要实现不同的子类系统即可自动识别判断。这样模块化的思想好处就是模块可以动态删除增加。
比如使用vector<Module>来存储模块.v.add(module),开发人员实现了一个模块之后,告诉负责加载模块的人员add(module)即可,又不会影响别人的代码,又解耦合,维护方便,增加模块又方便。
加载模块的人员只需要没觉这个vector并调用相应的模板方法即可实现动态处理。听明白的童鞋吼一声。^-^
test_method_template.cpp
#include <stdio.h> #include <iostream> #include <string> #include <io.h> using std::cout; using std::endl; //常见的模板方法父类 class TaskTemplate { public: TaskTemplate(void * userdata); bool Execute(); protected: virtual void* DoingWork(void * userdata){ return NULL;} virtual bool DoBeforeWork(void * userdata){ return true;} virtual bool DoFinishWork(void * userdata,void* result){ return true;} private: void* userdata_; }; TaskTemplate::TaskTemplate(void * userdata) { userdata_ = userdata; } bool TaskTemplate::Execute() { if(!DoBeforeWork(userdata_)) { //userdata_check cout << "check fail" << endl; return false; } return DoFinishWork(userdata_,DoingWork(userdata_)); } class DocTask : public TaskTemplate { public: DocTask(void * userdata):TaskTemplate(userdata){} protected: void* DoingWork(void * userdata) { cout << "Doc DoingWork" << endl; return NULL; } bool DoBeforeWork(void * userdata) { cout << "Doc DoBeforeWork" << endl; file_ = fopen((const char*)userdata,"w"); if(!file_) { return false; } return true; } bool DoFinishWork(void * userdata,void* result) { cout << "Doc DoFinishWork" << endl; if(file_) { cout << "close file" << endl; fclose(file_); file_ = NULL; } return true; } private: FILE* file_; }; int main(int argc, char *argv[]) { cout << "begin" << endl; char file[] = "E:\\test_TemplateMethod.txt"; DocTask tt(file); tt.Execute(); cout << "end..." << endl; return 0; }
输出:
---------- CompileLinkRun ---------- begin Doc DoBeforeWork Doc DoingWork Doc DoFinishWork close file end... Output completed (4 sec consumed) - Normal Termination
相关文章推荐
- [设计模式]_[中级]_[模板方法C++例子实现举例]
- 我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式—模板方法的C++实现
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式-模板方法模式 C++实现
- 设计模式C++实现(5)——原型模式、模板方法模式
- C++设计模式——工厂方法及工厂方法的隐藏实现(qq空间背景的例子)
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- First head 设计模式学习c++实现------模板方法模式(Template method pattern)
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)