[设计模式]<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算法。