内部类与Java国际象棋程序设计的单独类

时间:2013-07-03 19:30:39

标签: java this inner-classes

我用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);

2 个答案:

答案 0 :(得分:0)

您可以将其他类创建为单独的类。正如您在问题中所说的那样,其他每个类都可以只包含一个Game实例。对我来说似乎很好。但是,由于board是私有的,因此您需要在public Piece[][] getBoard()中创建Game方法,以便其他类可以访问该主板。

答案 1 :(得分:0)

没有标准的方法可以做到这一点,虽然我猜那里的人会分别定义类。拥有内部课程在逻辑上完全没问题!但是有几种方法可以处理单独的类定义。

  1. Singleton / Factory类方法 - 每次需要时,在工厂类分布式当前板中使用静态方法。当然,您需要为您的数组创建包装类 - Board类。 但这有点蹩脚 - 只是个人观点。我不同意不惜一切代价编写简单方法的愿景。

  2. 让你的Game类实例化你的Board类(数组的包装器,包含所有必要的方法)。然后将对此Board实例的引用传递给构造函数中的其他对象,并使这些对象记住此板实例。这样,在程序的最开始只传递一次引用。