1

我正在开发一个 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;
    ...        
};

如何让信息记录更容易?我尝试对信息窗口使用单例,但不是很满意,因为信息窗口的生命周期应该由主窗口控制。非常感谢!!!

4

1 回答 1

1

您所描述的是一种日志记录形式,并且日志记录通常使用单例对象完成。(这是单例的极少数合理用途之一。)

您可以有一个将消息定向到当前信息窗口的单例日志记录对象。所以你会创建你的日志对象,默认情况下,它只是把消息扔掉。创建 InfoWindow 时,它会将自身“注册”到日志对象。从那时起,日志对象将消息定向到信息窗口。当 InfoWindow 被销毁时,它会注销日志记录对象。

这样做的好处是您可以使用单例日志记录对象也将字符串复制到日志文件、控制台窗口或其他任何内容。

通过使用发布者/订阅者模型,您可以变得更加通用和解耦,但这可能比您目前想要和需要的更复杂。

于 2013-01-31T17:16:55.917 回答