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

现在我完成了编码,我意识到我有19个接口,只有17个课程!因此,我开始想知道我是否可能过度使用界面。

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

班级 -FullGame(实现FullGameInterface和FullGameObservable)

班级 -View1(实现FullGameObserver)

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

界面 - FullGameObservable(允许注册视图以进行更新通知)

界面 -FullGameObserver(由游戏的两个不同视图实现以接收通知)

我过度使用界面吗?

你有什么意见?

有帮助吗?

解决方案

接口很好。拥有很多不是问题。

特别是如果您只实施了第一场游戏。如果您将代码库重新使用以构建更多游戏,则可能最终会出现更多的多态性,因为您将重新使用接口。但是,在这一点上,如果实现方法中的方法比接口中有更多的方法,那么界面正在实现目的 - 他们隐藏了从客户端隐藏实施详细信息,他们被迫符合界面的范围,使多态性成为OO的真正好处。

其他提示

如果要更改实现,请使用接口。

对于诸如FullGame对象之类的东西,您可能不需要界面。

如果要更改FullGame的功能,则可以考虑制作接口,以便可以切换您实例化的fullGameInterface的对象。

编辑2:仅在需要时使代码更加复杂。如果您认为需要接口,请先停止。使用您已经拥有的课程。 (但是,当您使用它时,请尝试将呼叫者排除在实现细节之外。)一旦您拥有第二个类似的类,您就可以弄清楚什么是真正的接口和什么实现。如果您的呼叫者仍然需要尴尬的实现详细信息来放置在公共接口中,那么您将不会保持足够的分离。

编辑以提供更完整的答案:

接口对于解开要从实际对象(实现)访问对象(接口)的方法很有用。这对几种情况有好处:

  1. 您拥有不止一种方法,具有相同的语义和一般操作,但具有不同的基础实现。例如, List, ArrayList, , 和 LinkedList. List 是允许许多基于集合的方法接受的一般接口 ArrayList 或a LinkedList. 。这 Collection 界面允许为所有收藏品采用类似的安排。
  2. 出于架构原因,您需要将接口与实现分开。例如,您可以在一台计算机上具有调用对象,而另一台计算机上的实现对象。调用计算机上的代理实现了界面以通过网络调用到真实对象。接口表示呼叫者不必知道差异。 Java RMI做到了这一点。
  3. 您需要能够修改对象的调用方式。例如,以接口 Image 和两个实施者, FileImageFileImageProxy. 。代理加载 FileImage 按需并通过电话给 Image 接口到实际对象。客户永远不知道或关心他们如何获得图像,或者是否真正加载了图像;他们只是知道有一个 Image 他们可以使用它。

如果您控制了代码,并且只有一个实现,则可以表明该接口是毫无意义的(尽管如果您想进行测试可能会很有用)。请记住,内部类也是类。

界面的多重继承以及实现通常是一个坏主意。

我经常使用接口来充实我的设计。我彻底记录了他们,这迫使我考虑班级的责任。 API和类的内部词总是有所区别,因此,即使您没有多个实现(但)指定接口通常也没有伤害。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top