客户端/服务器 - 服务器可能会改变,如何将其抽象出去?

时间:2011-03-05 14:05:54

标签: java design-patterns client-server

我必须在Java中实现一个客户端/服务器架构,其中服务器将来可能会发生变化(好吧,它肯定会在某些时候发生)。

考虑这种可能的变化的最佳方法是什么?这就是我的想法:

1。)为服务器创建一个接口:

public interface AlarmService {
  ...
}

2。)创建一个具体的实现:

public AlarmServiceImpl implements AlarmService {
  ...
}

3。)编写静态工厂以获得某种实现

public AlarmServiceFactory {
  private AlarmService AlarmServiceFactory() {
    return new AlarmServiceImpl();
  }
}

这是个好主意吗?或者这太多了?或者也许我不应该考虑这个改变?

3 个答案:

答案 0 :(得分:3)

有一句咒语类似于“总是编程到接口,而不是实现”。虽然在许多情况下都是如此,但很多时候都是矫枉过正。在你的情况下,既然你知道实现会改变,并且你不会像对服务器那样对客户端进行那么多的控制,那么你一定要编程到一个接口。

工厂在两种情况下才真正有用。第一个是你有几个实现可用,你需要决定在运行时生成哪个。另一个是如果你在整个地方创建新的AlarmServiceImpl(),并且实现发生了变化。否则,我认为使用工厂是一种过度杀伤力。

所以..绝对构建一个客户端/服务器通过的接口。如果交换或选择实现不是一行或两行代码,只使用工厂,并且分散在各个地方。

答案 1 :(得分:2)

考虑Business Delegate模式。它比已经建议的接口/实现更强大。

答案 2 :(得分:1)

这个问题对我来说不是百分之百。但我认为您希望使您的服务器灵活,以便您可以轻松更改服务器而无需更改其他部分。我对吗?如果是,那么我认为你应该看看IOC模式。

问候 arefin。