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

あなたが説明したことはロギングの形式であり、ロギングは通常、シングルトン オブジェクトで行われます。(そして、これはシングルトンの数少ない合理的な用途の 1 つです。)

メッセージを現在の InfoWindow に送信するシングルトン ログ オブジェクトを作成できます。したがって、ロギング オブジェクトを作成すると、デフォルトでは、メッセージが破棄されるだけです。InfoWindow が作成されると、それ自体がログ オブジェクトに "登録" されます。それ以降、ログ オブジェクトはメッセージを InfoWindow に転送します。InfoWindow が破棄されると、ログ オブジェクトから登録解除されます。

これの良いところは、シングルトン ロギング オブジェクトを使用して、文字列をログ ファイルやコンソール ウィンドウなどにコピーできることです。

パブリッシャー/サブスクライバー モデルを使用することで、さらに一般化して分離することもできますが、それは現時点であなたが必要としているものよりも複雑になる可能性があります。

于 2013-01-31T17:16:55.917 に答える