我用Java编写国际象棋程序的方式有一个GameLauncher类和一个包含所有其他类的Game类,因为所有这些类都需要访问代表棋盘上的Pieces的Game的实例变量private Piece[][] board
。这些内部类是Player,BoardPanel(一个JPanel),Piece和所有其他的子类(Rook,Horse,Bishop,King等)。
我想知道实现这个的标准方法是将类作为Game的内部类(从而允许它们直接访问Game的board
对象)或将它们作为单独的类并传递{{1每次调用this
?
即,
new
与
相比board[0][0] = new Car(new Point(0, 0), RED);
答案 0 :(得分:0)
您可以将其他类创建为单独的类。正如您在问题中所说的那样,其他每个类都可以只包含一个Game实例。对我来说似乎很好。但是,由于board
是私有的,因此您需要在public Piece[][] getBoard()
中创建Game
方法,以便其他类可以访问该主板。
答案 1 :(得分:0)
没有标准的方法可以做到这一点,虽然我猜那里的人会分别定义类。拥有内部课程在逻辑上完全没问题!但是有几种方法可以处理单独的类定义。
Singleton / Factory类方法 - 每次需要时,在工厂类分布式当前板中使用静态方法。当然,您需要为您的数组创建包装类 - Board类。 但这有点蹩脚 - 只是个人观点。我不同意不惜一切代价编写简单方法的愿景。
让你的Game类实例化你的Board类(数组的包装器,包含所有必要的方法)。然后将对此Board实例的引用传递给构造函数中的其他对象,并使这些对象记住此板实例。这样,在程序的最开始只传递一次引用。