首页 > 代码库 > [设计模式]<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)