c ++静态观察者类

时间:2016-10-19 20:06:58

标签: c++ multithreading observer-pattern static-class

我有两个程序:服务器和客户端

class client
{
 private:
  Network    net;
  Gui        gui;
};

这是网络课程

class Network
{
  public:
   void      receivePacket(packet)
   {
     Protocol::readPacket(packet)
   }
};

这是Gui课程

class Gui
{
 private:
  std::string   informations;

 public:
  void          displayInfo();
  void          updateInformation(information);
};

这里的协议

class Protocol
{
     static void     readPacket(packet)
     {
       if (packet.command == "refreshGui")
         //I need somehow to call GUI::UpdateInformation here and give the information from packet.information
     }
};

协议被视为"静态类"这意味着不应该实例化。因此,当Protocol::readPacket从服务器获得packet时,它应该能够将信息发送到GUI。然而,情况并非总是如此,所以传递一个点/参考并不是我想要的。

没有很好地说明但是这个想法是: - Protocol::readPacket寻求我们是否需要致电GUI - 协议不应该采取另一种论点,不应该实例化。

有人给了我关于使用Observer-pattern的建议。 Protocol将是主题,GUI是观察者。但是,如果没有实例化协议,我就无法做到这一点。

有没有办法在没有实例化协议的情况下做到这一点?

1 个答案:

答案 0 :(得分:0)

在分布式计算中,节点的网络管理器接收消息并调用与消息类型相关联的调度程序是一种常见模式。你的需求非常相似。这是你可以做的:

  • 在您的网络课程中,维护一个unordered_map< packet_type,std :: function>。
  • 当你的程序启动时,将那个unordered_map推入std :: pair<“refreshGui”,Gui :: UpdateInformation>
  • 在Network :: receivePacket中,从unordered_map中检索函数并调用它。