为名称标识的对象创建一个类是一个好主意吗?

时间:2010-03-17 18:25:01

标签: java oop class object

我有一个可以通过名称识别的服务列表。每个服务都有一组参数(IP地址,端口,可用性等)。还有一些方法可以应用于服务(关闭连接,打开连接,向服务器发送消息,检查它是否响应等)。

因此,我认为创建Server类并将真实服务器表示为此类的对象是一种自然的方法。

但是我意识到这不是很方便。例如,我有一个服务器的名称(只是一个字符串),我想对这个服务器做一些事情。那么我需要有一个映射,它将服务器的名称映射到代表该服务器的对象?它似乎不是一个优雅的解决方案。

我决定让一个包含一组静态方法的类。然后,例如,以下列方式使用它:ServerClass.sendMessage("NameOfServer","MyMessage")或例如ServerClass.close("NameOfServer")ServerClass.getIP("NameOfServer")

这是一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

拥有具有各种实例的类的一个优点是它提供了一种类型安全性。如果你有

Server myServer = ServerRepository.getServer("NameOfServer");
if (myServer != null) myServer.sendMessage("MyMessage");

然后您知道在发送消息之前,如果您的服务器名称中有拼写错误(因为您的存储库无法返回匹配的消息)。

答案 1 :(得分:0)

您的所有服务器是否公开相同的服务,或者是否存在依赖于服务器的服务。举个例子,如果你有两个FooServers都有方法doFoo()而BarServers有一个方法doBar()但是Foo没有doBar而Bar没有doFoo,那么这可能是一个坏主意,因为你的ServerClass可能会暴露出方法对潜在的来电者毫无意义。但是,如果您知道所有服务器都将成为FooServers,那么这可能是一种有效的方法,因为您可以集中公共代码。我要小心你的代码仍然是可维护的,并且你不需要在需要自定义的地方强制执行常见的行为,或者最后添加大量额外的参数来指示“特殊情况”,你需要稍微改变一下行为有这样或那样的原因。