这是三个接口:IServer, IComponent, IClient.
它们之间的连接是通过事件完成的。我编写Server, Component, Client
了分别实现它们的类。
组件之间可能存在依赖关系。也就是说,如果组件 y 依赖于 x 那么在x.Start()
调用时 - 调用所有后代Start()
。依赖项是由in 中的AddDependency()
方法创建的IComponent
。(见下面的源代码链接)。
客户端不能直接看到组件并通过服务器使用事件与它们交互。只有在所有组件和客户端都在服务器上注册后,才能完成此操作。
问题:该方法Start()
有 2 个入口点:1:在事件处理程序Start()
中调用Server
(第一个组件) 2:Start()
在Component
事件处理程序中调用(子代已启动)。
对于 1:如果组件的状态已经是Running
- throwIllegalOperationException
对于 2:如果后代已经是Running
- 什么也不做。
如何区分1和2?
限制: - 修改接口 - 禁止 - 向下转换 - 禁止。
我看到的一个解决方案是放置静态标志,它在第Start()
一个组件被调用后立即下降。然而,这种方法破坏了封装,因为每次都应该在某些“外部”方法(例如,在服务器的处理程序中)重新初始化标志,因此外部方法必须看到比接口中指定的更多的东西。这也隐含地暗示 Start() 仅由服务器调用,这在问题中并不能保证。
还有什么想法吗?
来源: http ://rghost.net/38868270
提前致谢。