2013-01-31 62 views
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; 
    ...   
}; 

如何使信息記錄更容易?我嘗試使用單身人士的信息窗口,但不是很滿意,因爲信息窗口的生活應該由主窗口控制。非常感謝!!!

回答

1

你所描述的是一種日誌記錄形式,日誌記錄通常是用單例對象完成的。 (這是單身人士極少數合理用途之一)。

您可以擁有一個將消息引導至當前InfoWindow的單例記錄對象。所以你會創建你的日誌記錄對象,默認情況下,它只是拋出消息。當InfoWindow創建時,它將自己註冊到日誌記錄對象。從此日誌記錄對象將消息引導到InfoWindow。當InfoWindow被銷燬時,它會向記錄對象註銷。

好的是你可以使用單例記錄對象來將字符串複製到日誌文件,控制檯窗口或其他任何東西。

通過使用發佈者/訂閱者模型,您可以變得更加通用並且可以解耦,但這可能比您目前需要的更加精細。