我必须在Java中实现一个客户端/服务器架构,其中服务器将来可能会发生变化(好吧,它肯定会在某些时候发生)。
考虑这种可能的变化的最佳方法是什么?这就是我的想法:
1。)为服务器创建一个接口:
public interface AlarmService {
...
}
2。)创建一个具体的实现:
public AlarmServiceImpl implements AlarmService {
...
}
3。)编写静态工厂以获得某种实现
public AlarmServiceFactory {
private AlarmService AlarmServiceFactory() {
return new AlarmServiceImpl();
}
}
这是个好主意吗?或者这太多了?或者也许我不应该考虑这个改变?
答案 0 :(得分:3)
有一句咒语类似于“总是编程到接口,而不是实现”。虽然在许多情况下都是如此,但很多时候都是矫枉过正。在你的情况下,既然你知道实现会改变,并且你不会像对服务器那样对客户端进行那么多的控制,那么你一定要编程到一个接口。
工厂在两种情况下才真正有用。第一个是你有几个实现可用,你需要决定在运行时生成哪个。另一个是如果你在整个地方创建新的AlarmServiceImpl()
,并且实现发生了变化。否则,我认为使用工厂是一种过度杀伤力。
所以..绝对构建一个客户端/服务器通过的接口。如果交换或选择实现不是一行或两行代码,只使用工厂,并且分散在各个地方。
答案 1 :(得分:2)
考虑Business Delegate模式。它比已经建议的接口/实现更强大。
答案 2 :(得分:1)
这个问题对我来说不是百分之百。但我认为您希望使您的服务器灵活,以便您可以轻松更改服务器而无需更改其他部分。我对吗?如果是,那么我认为你应该看看IOC模式。
问候 arefin。