单独使用单例代理模式并丢失两者?

时间:2014-05-14 17:42:38

标签: c++ design-patterns mfc callback singleton

我将回调函数传递给库。回调基本上是从dll接收更新并将其发送到GUI进行显示。问题是,由于回调是全局或静态函数,因此它不知道GUI以及传递给谁的对话框。我用来实现这一目标的方法是使用单例和代理(类似)。

class CDispatcher
{
public:
    CDispatcher(void);
    ~CDispatcher(void);

protected:
    static HWND m_hWnd;

public:
    static void SetWindow( HWND hWnd );
    static void Dispatch(int code, char * msg);
};

稍后在代码中

BOOL CTestDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // I need to set this before I set callback
    CDispatcher::SetWindow( m_hWnd );

    //now I can set the callback
    LibRegisterCallback( CDispatcher::Dispatch );

    return TRUE;  // return TRUE  unless you set the focus to a control
}

虽然这有效,但首先我不知道我的CDispatcher类是不是好模块。它似乎不是一个好的单身人士,它看起来不是一个好的代理人。也许我可以在构造函数中传递窗口的句柄,这会使它变得更好,但如果我甚至不可能实例化单例,我就不会这样做。另一件事是我从来没有如何实例化CDispatcher,因为它只是一个全球所有成员。

这是一种可以更好地应用代理设计模式的情况(我猜想与单身人士一起)?也许另一种模式更优雅地解决了这个问题?或者我的实施是否正常?

0 个答案:

没有答案