小编Dav*_*ood的帖子

Java中的国际象棋 - 面向对象与效率

我正在用Java开发一个国际象棋程序并考虑以下问题:

  • Rook片需要实现直线移动.
  • Bishop部分要求实施对角线移动.

然而,

  • 女王片需要实现上述两种运动模式.

我不能想到建立这种关系的干净解决方案,我已经考虑了一些,但它们都没有兼容良好的面向对象设计代码高效.

  1. Java不支持多重继承,因此Queen无法借用Rook和Bishop的实现

  2. 如果Rook和Bishop扩展了Queen,我需要将每种运动的逻辑提取到单独的方法中,这将严重影响我目前的设计如何验证运动.

以上解决方案似乎都不够优雅,只能击败:

  1. 将所有移动实现放入所有部分的父类中,这样他们都可以共享所有常见的实现(其中有很多)

我知道解决方案3违反了良好的Java设计,但在这种情况下,该设计模式似乎只是强制臃肿,不优雅的解决方案.

可能通过对程序进行全面重组可以避免这种情况,但到目前为止,一切看起来都非常有效,优秀的OO设计是否总是以功能和结构的直接性为代价?我的方法对于语言的风格是错误的吗?

你会如何解决这个问题?

java oop chess

7
推荐指数
1
解决办法
773
查看次数

标签 统计

chess ×1

java ×1

oop ×1