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,主要的问题是我的实现是否符合模式?