当前位置: 首页 > 知识库问答 >
问题:

OOP设计中避免对象和另一个对象的两种方法

陆斌
2023-03-14

国王、王后、鲁克、主教、骑士、卒:

Piece:以上各部分的超类,共享功能如下所示

这里是我不喜欢的:我的Square类中有一个名为“board”的字段,这样我就可以引用给定的Square所属的board。我不喜欢这个设计,因为它会导致克隆的问题。

public Square getSquareOneMoveAway(Square start, int heightChange, int widthChange) {

    Square candidateSquare = start.getBoard().getNearbySquare(start, heightChange, widthChange);

    if (candidateSquare != null) {
        if (candidateSquare.isEmpty()) {
            return candidateSquare;
        } else if (! candidateSquare.getPiece().getColor().equals(start.getPiece().getColor())) {
            return candidateSquare;
        }
        else {
            return null;
        }
    }
    else {
        return null;
    }
}

我是否应该将这个方法移到Board类中,这样我就可以访问Board对象,而不必从Square到Board?

我很感激你的想法bclayman

共有1个答案

司空浩邈
2023-03-14

在我看来,你把问题搞得太过火了。用另一个类来表示棋盘的正方形真的有什么好处吗?如果不是(我也不这么认为),我就把Square类去掉。

class Board {
    public static final int MAX_ROWS = 8;
    public static final int MAX_COLS = 8;

    private Piece[][] squares;

    public Board() {
        squares = new Piece[ MAX_ROWS ][ MAX_COLS ];
    }

    // ...
}

不过,我会有一个Position类,它包含一对行和一列。

希望这有帮助。

 类似资料:
  • 问题内容: 堆垛机。我一直在网站上搜索我的问题,但没有找到我想要的东西。我坚持下面的代码: 得到了一个不错的数组列表,但是如果我在ArrayList中添加更多“ newUsers”,它们似乎会相互覆盖。我不想创建一个newUser1,newUser2对象,因为稍后在我的程序中,我必须能够直接从该程序添加新用户。 如何实现呢? ValidateUser: } 问题答案: 如果我理解正确,那么您是以这

  • 我试图从JSON检查并推送对象细节中的对象。 这就是我的JSON的样子 现在,我尝试读取属性集值[1]ie;“pagenum”。在这里,我试图用name检查更多属性值。如果不存在,则将其推入该属性集中。 由于属性集[0]位于数组中,所以我在将其推入属性集[0]时没有任何问题。这里我得到了属性集中的单个对象[1]。 尝试对属性集[1]执行此操作,但引发错误- 我可以成功地实现上面的代码,如果有一个数

  • 本文向大家介绍js中数组对象去重的两种方法,包括了js中数组对象去重的两种方法的使用技巧和注意事项,需要的朋友参考一下 方法一: 采用对象访问属性的方法,判断属性值是否存在,如果不存在就添加。 方法二: 采用数组中的reduce方法,遍历数组,也是通过对象访问属性的方法 若有不足请多多指教!希望给您带来帮助! 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习

  • 本文向大家介绍PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程,包括了PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程的使用技巧和注意事项,需要的朋友参考一下 1、PHP中的抽象类 PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被

  • 我有像下面这样的课。 我通过Restendpoint获取此对象。问题是,当字段passPayer和driver对象相等时,在返回的JSON中,driver字段只包含ID(它只是一个整数值),passPayer字段包含所有对象字段。 当这些字段具有不同的对象时,两个字段都显示如下所示的完整详细信息。 我需要两个对象都包含数据(字段。[id,firstName,lastName,idNo]),无论它们

  • 问题内容: 如下所示,有两种简单的方法可以制作流式复印机(介绍Apache Commons或类似工具的栏)。我应该去哪一个?为什么? 与 问题答案: 我将使用非静态(实例)版本,并将其作为显式依赖项(使用setter)提供给消费者: 然后将其模拟用于单元测试是微不足道的,因此,消费者的测试不会与实现耦合。 换出功能很简单,例如:使用子类; 与依赖项注入系统配合良好。 编辑 为了回应(“有用!”)的