zoukankan      html  css  js  c++  java
  • [设计模式]<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算法。

  • 相关阅读:
    挖矿程序linux 删除
    本地复制vue项目
    新建vue项目
    CentOS7单用户模式
    CentOS6
    CentOS6-系统管理操作
    CentOS7-系统管理操作
    VMWare克隆虚拟机
    虚拟机网络模式设置为NAT
    VI/VIM编辑器
  • 原文地址:https://www.cnblogs.com/hebaichuanyeah/p/6092152.html
Copyright © 2011-2022 走看看