Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 试着写一个;观察员“;图案_C++_Design Patterns - Fatal编程技术网

C++ 试着写一个;观察员“;图案

C++ 试着写一个;观察员“;图案,c++,design-patterns,C++,Design Patterns,我是否正确地实现了这个模式?我的示例的想法是,存在文档和应用程序(应用程序执行观察者角色)。在开始时,每份文件应附上观察员。此外,文档可以通过向观察者(应用程序)发出信号来关闭除他自己之外的所有文档 需求-示例应使用事件模型 class Application { std::vector<Document *> docs; public: void add_document(Document *doc) {

我是否正确地实现了这个模式?我的示例的想法是,存在文档和应用程序(应用程序执行观察者角色)。在开始时,每份文件应附上观察员。此外,文档可以通过向观察者(应用程序)发出信号来关闭除他自己之外的所有文档

需求-示例应使用事件模型

class Application 
{
        std::vector<Document *> docs;
    public:
        void add_document(Document *doc)
        {
            docs.push_back(doc);
        }
    public slots:
        void close_non_active_docs_button_pressed(Document *active_doc)
        {
            for (auto idoc: this->docs)
            {
                if (idoc == active_doc)
                    continue;
                idoc->close();  
            }
        }
}


class Document
{
        Application *app;
    public:
        void attach_to_app(Application *app)
        {
                this->curr_app = app;
                app->add_document(this);
        }

        void close(){...};

    public signals:
        void close_non_active_docs_button_pressed(Document *active_doc);



    ...
        emit close_non_active_docs_button_pressed(this);
}
///CONNECT(...)
类应用程序
{
std::矢量文档;
公众:
作废新增单据(单据*单据)
{
文档。推回(doc);
}
公众时段:
作废关闭非活动单据按钮按下(单据*活动单据)
{
用于(自动idoc:此->文档)
{
如果(idoc==活动文档)
继续;
idoc->close();
}
}
}
类文档
{
应用程序*app;
公众:
无效附加到应用程序(应用程序*应用程序)
{
此->当前应用程序=应用程序;
应用->添加_文档(此);
}
void close(){…};
公共信号:
作废关闭非活动单据按钮按下(单据*活动单据);
...
发出关闭按钮\u非活动按钮\u按下(此按钮);
}
///连接(…)

实际上,这些文件被称为“观察员”。但是你的实现应该是有效的。也许把它发布在网站上是值得的。@johneleman,主要的问题是我的实现是否符合模式?