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

Dav*_*les 3 java design-patterns interface pacman

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

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

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

- FullGame(实现FullGameInterface和FullGameObservable)

- View1(实现FullGameObserver)

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

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

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

我是否过度使用接口?

你有什么意见?

jpr*_*ete 9

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

对于类似FullGame对象的东西,您可能不需要界面.

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

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

编辑更完整的答案:

接口可用于解耦要从实际对象(实现)访问对象(接口)的方法.这适用于以下几种情况:

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