【发布时间】:2012-02-29 15:40:04
【问题描述】:
我正在编写一个 Python 程序,它将使用 Twisted 连接到 TCP 服务器。套接字另一端的服务器可能正在运行两种可能的协议(protoA 或 protoB)之一,但在我启动连接并“询问”服务器正在使用哪种协议之前,我不知道它是哪一种用过的。连接后,我能够确定正在使用哪个版本的协议(protoA 或 protoB),但我无法提前知道。
显然,一种解决方案是在我的扭曲协议派生类中包含大量特殊情况代码——即,如果 protoA 执行此操作,则 elif protoB 执行其他操作。但是,我希望能够将两个独立协议的代码保留在两个独立的协议实现中(尽管它们可能通过基类共享一些功能)。由于协议的两个版本都涉及维护状态,因此必须将两个版本混合到同一个类中很快就会让人感到困惑。
我该怎么做?有没有办法在工厂实现中进行初始“协议识别”步骤,然后实例化正确的协议派生?
【问题讨论】: