在过去的6年里,我一直是Java程序员,从今年年初开始,我对游戏编程感兴趣。所以,我认为从一个流行的游戏开始是一个好主意,我在Java中实现了Pac-Man女士游戏。我可以说我的实现看起来与原始游戏大约有90%相似,我尝试尽可能多地使用设计模式和最佳实践,因为这只是学习编写基本2D游戏的个人项目。
现在我完成了编码,我意识到我有19个接口,只有17个类!所以我开始想知道我是否可能过度使用接口。
以下是我使用的几个类/接口的示例:
类 - FullGame(实现FullGameInterface和FullGameObservable)
类 - View1(实现FullGameObserver)
界面 - FullGameInterface(基本功能方法:恢复,暂停,播放等)
接口 - FullGameObservable(允许注册视图以获取更新通知)
界面 - FullGameObserver(通过2种不同的游戏视图实现接收通知)
我是否过度使用接口?
您有什么看法?
答案 0 :(得分:9)
如果要更改实施,请使用界面。
对于像你的FullGame对象,你可能不需要界面。
如果您要更改FullGame的功能,那么您可以考虑创建一个接口,以便您可以切换为FullGameInterface实例化的对象。
编辑2:只在需要时使代码更复杂。如果您认为需要界面,请先停止。使用您已经拥有的课程。 (但是当你使用它时,试着让调用者远离实现细节。)一旦你有了第二个类似的类,那么你就可以弄清楚什么是真正的接口和实现的内容。如果你的调用者仍然需要放入公共接口的实现细节,那么你就不能将它们保持足够的分离。
编辑以获得更完整的答案:
接口对于解耦要从实际对象(实现)访问对象(接口)的方法非常有用。这适用于几种情况:
List
,ArrayList
和LinkedList
。 List
是一般界面,允许许多基于集合的方法接受ArrayList
或LinkedList
。 Collection
接口允许对所有集合进行类似的安排。Image
和两个实施者FileImage
和FileImageProxy
。代理按需加载FileImage
并将Image
接口的调用传递给实际对象。客户永远不会知道或关心他们如何获得图像,或者它是否真的被加载;他们只知道有一个Image
他们可以使用它。答案 1 :(得分:4)
如果您控制代码并且只有一个实现,那么接口毫无意义是一个好兆头(尽管如果您想要测试,它可能很有用)。 请记住,内部类也是类。
接口的多重继承以及实现通常都是一个坏主意。
答案 2 :(得分:2)
接口很好。拥有很多它们并不是一个问题。
特别是如果你只实现了你的第一个游戏。如果你重新使用代码库来构建更多游戏,你可能会得到更多的多态性,因为你将重新使用这些接口。但是在这一点上,如果实现中的方法比接口中的方法多,那么接口就是有目的的 - 它们隐藏了客户端的实现细节,因此客户端被迫遵从接口,使多态性成为OO的真正好处。
答案 3 :(得分:1)
我经常使用界面来充实我的设计。我彻底记录了这些,这迫使我思考课程的责任。 API和类的内部之间总是存在一些区别,因此即使您没有(还)的多个实现,通常也没有指定接口。