在我实施Pac-Man女士时,可能过度使用Java界面
-
19-09-2019 - |
题
在过去的6年中,我一直是Java程序员,自今年年初以来,我对游戏编程感兴趣。因此,我认为从一个受欢迎的游戏开始是一个好主意,我在Java实施了Pac-Man女士。我可以说,我的实现看起来大约90%与原始游戏相似,我尝试使用尽可能多的设计模式和最佳实践,因为这只是一个个人项目,可以学习编码基本的2D游戏。
现在我完成了编码,我意识到我有19个接口,只有17个课程!因此,我开始想知道我是否可能过度使用界面。
这是我使用的几个类/接口的示例:
班级 -FullGame(实现FullGameInterface和FullGameObservable)
班级 -View1(实现FullGameObserver)
界面 -FullGameInterface(基本功能方法:简历,暂停,播放等)
界面 - FullGameObservable(允许注册视图以进行更新通知)
界面 -FullGameObserver(由游戏的两个不同视图实现以接收通知)
我过度使用界面吗?
你有什么意见?
解决方案
接口很好。拥有很多不是问题。
特别是如果您只实施了第一场游戏。如果您将代码库重新使用以构建更多游戏,则可能最终会出现更多的多态性,因为您将重新使用接口。但是,在这一点上,如果实现方法中的方法比接口中有更多的方法,那么界面正在实现目的 - 他们隐藏了从客户端隐藏实施详细信息,他们被迫符合界面的范围,使多态性成为OO的真正好处。
其他提示
如果要更改实现,请使用接口。
对于诸如FullGame对象之类的东西,您可能不需要界面。
如果要更改FullGame的功能,则可以考虑制作接口,以便可以切换您实例化的fullGameInterface的对象。
编辑2:仅在需要时使代码更加复杂。如果您认为需要接口,请先停止。使用您已经拥有的课程。 (但是,当您使用它时,请尝试将呼叫者排除在实现细节之外。)一旦您拥有第二个类似的类,您就可以弄清楚什么是真正的接口和什么实现。如果您的呼叫者仍然需要尴尬的实现详细信息来放置在公共接口中,那么您将不会保持足够的分离。
编辑以提供更完整的答案:
接口对于解开要从实际对象(实现)访问对象(接口)的方法很有用。这对几种情况有好处:
- 您拥有不止一种方法,具有相同的语义和一般操作,但具有不同的基础实现。例如,
List
,ArrayList
, , 和LinkedList
.List
是允许许多基于集合的方法接受的一般接口ArrayList
或aLinkedList
. 。这Collection
界面允许为所有收藏品采用类似的安排。 - 出于架构原因,您需要将接口与实现分开。例如,您可以在一台计算机上具有调用对象,而另一台计算机上的实现对象。调用计算机上的代理实现了界面以通过网络调用到真实对象。接口表示呼叫者不必知道差异。 Java RMI做到了这一点。
- 您需要能够修改对象的调用方式。例如,以接口
Image
和两个实施者,FileImage
和FileImageProxy
. 。代理加载FileImage
按需并通过电话给Image
接口到实际对象。客户永远不知道或关心他们如何获得图像,或者是否真正加载了图像;他们只是知道有一个Image
他们可以使用它。
如果您控制了代码,并且只有一个实现,则可以表明该接口是毫无意义的(尽管如果您想进行测试可能会很有用)。请记住,内部类也是类。
界面的多重继承以及实现通常是一个坏主意。
我经常使用接口来充实我的设计。我彻底记录了他们,这迫使我考虑班级的责任。 API和类的内部词总是有所区别,因此,即使您没有多个实现(但)指定接口通常也没有伤害。