如: 用户登录功能CLoginDlg::OnClickLogin()                                   CLoginDlg* ::OnRepLogin()
          |                                                             |
CLoginSocket::OnLogin(UserName, UserPwd, CLoginDlg*)         CLoginSocket* ::OnRepLogin()
          |                                                             |
CSocket::Send(CLoginSocket*)                                    CSocket::OnRecv()
          |                                                             |
          |--------------------------------------------------------------这是一个用户登录的过程,
首先, 用户点击[登录]按钮事件 - 调用 CLoginSocket 类的 OnLogin 方法, 同时传入 this
      CLoginSocket 类 调用 CSocket 类的 Send(), 同时传入 this
      CSocket 类发送包成功, 返回消息后, 响应 OnRecv()
      CSocket::OnRecv() 根据 传入的 CLoginSocket* 指针调用 CLoginSocket::OnRepLogin()
      CLoginSocket::OnRepLogin() 又再根据 传入的 CLoginDlg* 指针最终显示登录结果到界面.以上做法, 我发现的问题是 CLoginDlg, CLoginSocket, CSocket 三个类的联系太紧密, 缺一不可, 不可以独立开来, 有什么方法, 可以令到三个类互相独立, 并可以达到上面的效果?