我用Java编写国际象棋游戏已经设置了一个具有2d Square对象数组的Board类。每个正方形的高度和宽度(介于0和7之间)。我将编写一个接收方形对象,垂直偏移和水平偏移的方法。
例如:如果我调用getNearbySquare(mySquare,3,2),它应该返回我的Board中的方形对象,其高于mysquare 3和mySquare右边2。
我最初在Square类中将其写为实例方法,它只是采用垂直和水平偏移。问题是,我正在创建然后返回一个新的方形对象,而不是我的Board类中的2d数组中的正确对象。
我看到两个选项:
1)在Square类中创建一个实例方法,该方法接受Board对象,垂直偏移和水平偏移。我将找到调用此方法的方形对象的当前高度和宽度,添加垂直和水平偏移以在所需方块的板中获取新位置,然后使用Board [newHeight] [newWidth]访问它]
2)在Board类中创建一个实例方法做同样的事情,但不要求我传入Board对象,如1)所示。相反,我需要传入方形对象。
就做出这些决定而言,是否存在普遍接受的做法?
感谢您的帮助, Mariogs
答案 0 :(得分:5)
从一个非常简单的观点来看,getNearbySquare()
方法更适合作为Board
的实例方法,而不是广场,因为该方法需要有关布局的详细信息和董事会的人口,在Board
实例中更容易做(并保持封装/松散耦合)。
在Square
实例上使用该方法意味着让方形对象可以访问有关可能是私有的板的信息。
相关阅读;
答案 1 :(得分:1)
Square可以知道它所属的董事会,因为Square不是孤立的。否则,广场知道它的位置是没有意义的。当用户点击Square时,Square可能只是将该事件传达给其董事会,并且董事会将能够根据Square的位置对用户操作作出反应。鉴于理事会也应该知道其广场,它将很容易计算哪一个将成为下一个行动的目标。
另见OOP Design for Chess Game in Java (Trouble with Piece / Board Interaction)