我正在开发一个 GUI 应用程序。我有一个主窗口。主窗口有一个信息窗口,用于记录当前操作的一些基本信息,如正在做什么,需要多长时间。代码如下:
class InfoWindow
{
public:
InfoWindow();
void Record(const string& info);
};
class MainWindow
{
public:
void OperationInMainWindow()
{
// Perform the operation.
...
// Record the operation information (okay here since m_infoWindow is
// accessible.
m_infoWindow.Record(...);
}
private:
InfoWindow m_infoWindow;
// Many other windows. Other windows have also operations whose information
// need to record. And getting worse, the other windows have children
// windows who have to record operation information in the main window's
// info window.
OtherWindow1 m_otherWindow1; //
OtherWindow2 m_otherWindow2;
...
};
如何让信息记录更简单?我尝试对信息窗口使用单例但不是很满意,因为信息窗口的生命应该由主窗口控制。多谢!!!
您所描述的是一种日志记录形式,而日志记录通常使用单例对象完成。 (这是单例为数不多的合理用途之一。)
您可以有一个单独的日志记录对象,将消息定向到当前的 InfoWindow。所以你会创建你的日志记录对象,默认情况下,它只是丢弃消息。创建 InfoWindow 时,它会向日志对象“注册”自己。从那时起,日志记录对象将消息定向到 InfoWindow。当 InfoWindow 被销毁时,它会注销日志对象。
这样做的好处是,您还可以使用单例日志记录对象将字符串复制到日志文件、控制台窗口或其他任何内容。
通过使用发布者/订阅者模型,您可以获得更通用和解耦的效果,但这可能比您此时想要和需要的更精细。
我是一名优秀的程序员,十分优秀!