首页 > 代码库 > [设计模式]<10>. C++与模板方法模式(template method pattern)
[设计模式]<10>. C++与模板方法模式(template method pattern)
作者:默默的EEer
原文地址:http://www.cnblogs.com/hebaichuanyeah/p/6092152.html
曾经在Qt中写过这样个需求,需要在程序所有的界面中添加一个自定义的事件。该事件由一个线程触发。
在每一个界面对象里面都单独添加一个事件绑定,确实是麻烦。
于是,我写了一个事件的父类接口,在事件中把该线程和一个事件过滤器函数绑定,同时在事件过滤器判断是否触发事件,然后调用一个事件响应函数,该事件响应函数是一个纯虚函数,实际上在子类中实现。并在把界面类继承自这个父类。
后来,我翻到《设计模式》,发现这套东西其实一个"模板方法"模式。
意图:定义一个操作算法骨架,而将一些步骤放到子类中实现。
上述事件机制的实现。BaseEvent类不能被实例化,只能被继承。
class BaseEvent { public: BaseEvent() { 将触发事件的线程与eventFiler事件过滤器绑定。 } protected: virtual void envent()=0; //事件过滤器 void eventFiler() { if(当前界面获得焦点) { //该事件函数其实在子类实现。 envent(); qDEBUG()<<打印当前对象信息。 } } }
另一个栗子,在父类中有一个打开文档的操作函数,然而对不同的格式的文档,用不同的算法打开。
void BaseClass::openDocument(string path) { if(路径不存在) { return; } Document * doc = open (path); read(doc ); }
在以上代码智哦你哦个,实际 open函数,和read函数都纯虚函数,对于不同格式的文档,在不同子类中实现具体的open和read算法。
之前在Qt中自定义事件基类的例子。
[设计模式]<10>. C++与模板方法模式(template method pattern)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。