在我的Pac-Man女士的实现中可能过度使用java接口

时间:2009-10-02 14:47:31

标签: java design-patterns interface pacman

在过去的6年里,我一直是Java程序员,从今年年初开始,我对游戏编程感兴趣。所以,我认为从一个流行的游戏开始是一个好主意,我在Java中实现了Pac-Man女士游戏。我可以说我的实现看起来与原始游戏大约有90%相似,我尝试尽可能多地使用设计模式和最佳实践,因为这只是学习编写基本2D游戏的个人项目。

现在我完成了编码,我意识到我有19个接口,只有17个类!所以我开始想知道我是否可能过度使用接口。

以下是我使用的几个类/接口的示例:

- FullGame(实现FullGameInterface和FullGameObservable)

- View1(实现FullGameObserver)

界面 - FullGameInterface(基本功能方法:恢复,暂停,播放等)

接口 - FullGameObservable(允许注册视图以获取更新通知)

界面 - FullGameObserver(通过2种不同的游戏视图实现接收通知)

我是否过度使用接口?

您有什么看法?

4 个答案:

答案 0 :(得分:9)

如果要更改实施,请使用界面。

对于像你的FullGame对象,你可能不需要界面。

如果您要更改FullGame的功能,那么您可以考虑创建一个接口,以便您可以切换为FullGameInterface实例化的对象。

编辑2:只在需要时使代码更复杂。如果您认为需要界面,请先停止。使用您已经拥有的课程。 (但是当你使用它时,试着让调用者远离实现细节。)一旦你有了第二个类似的类,那么你就可以弄清楚什么是真正的接口和实现的内容。如果你的调用者仍然需要放入公共接口的实现细节,那么你就不能将它们保持足够的分离。

编辑以获得更完整的答案:

接口对于解耦要从实际对象(实现)访问对象(接口)的方法非常有用。这适用于几种情况:

  1. 您有多个这些方法的实现,具有相同的语义和一般操作,但具有不同的底层实现。例如,ListArrayListLinkedListList是一般界面,允许许多基于集合的方法接受ArrayListLinkedListCollection接口允许对所有集合进行类似的安排。
  2. 出于架构原因,您需要将接口与实现分开。例如,您可以将调用对象放在一台计算机上,将实现对象放在另一台计算机上。调用机器上的代理实现了通过网络调用真实对象的接口。界面意味着调用者不必知道差异。 Java RMI做到了这一点。
  3. 您需要能够修改调用对象的方式。例如,使用界面Image和两个实施者FileImageFileImageProxy。代理按需加载FileImage并将Image接口的调用传递给实际对象。客户永远不会知道或关心他们如何获得图像,或者它是否真的被加载;他们只知道有一个Image他们可以使用它。

答案 1 :(得分:4)

如果您控制代码并且只有一个实现,那么接口毫无意义是一个好兆头(尽管如果您想要测试,它可能很有用)。 请记住,内部类也是类。

接口的多重继承以及实现通常都是一个坏主意。

答案 2 :(得分:2)

接口很好。拥有很多它们并不是一个问题。

特别是如果你只实现了你的第一个游戏。如果你重新使用代码库来构建更多游戏,你可能会得到更多的多态性,因为你将重新使用这些接口。但是在这一点上,如果实现中的方法比接口中的方法多,那么接口就是有目的的 - 它们隐藏了客户端的实现细节,因此客户端被迫遵从接口,使多态性成为OO的真正好处。

答案 3 :(得分:1)

我经常使用界面来充实我的设计。我彻底记录了这些,这迫使我思考课程的责任。 API和类的内部之间总是存在一些区别,因此即使您没有(还)的多个实现,通常也没有指定接口。