在棋盘游戏中什么时候适合使用Java接口?

时间:2019-04-24 21:15:09

标签: java interface

(注意:这更多是理论上的问题)

嗨!我创建了一个工作棋盘游戏,称为“跳棋”,除了有不同的部分和规则外,它类似于国际象棋,并且我无需使用任何界面即可完成此操作。但是,我注意到它在我们的家庭作业说明中说,至少应使用一个接口。

所以我想知道什么时候在Java中使用界面更合适,或更具体地说,何时在诸如跳棋或国际象棋这样的棋盘游戏中使用该界面对您有好处?我试图了解我可以为什么创建界面(例如运动,绘制到木板等),同时最有可能使该程序受益。

3 个答案:

答案 0 :(得分:1)

对接口进行编程始终是一个好习惯,因为它可以对一个类进行形式化以使其具有必需的方法集。它还使收集实现了通用接口的类一起工作成为可能。想象一下,您有许多具有setColor方法的对象。不必单独设置颜色或通过每种对象的列表来设置颜色,您可以让它们执行以下操作:

Interface ColorSetter {
   public void setColor(Color color);
}

class Foo implements ColorSetter {
//details omitted
}

class Bar implements ColorSetter {
//details omitted
}

List<ColorSetter> colorSetters = new ArrayList<>();
colorSetters.add(new Foo());
colorSetters.add(new Bar());

// later...
for (ColorSetter c : colorSetters) {
   c.setColor(Color.blue);
}

答案 1 :(得分:1)

任何类型的编程语言中的接口都是一种约定,用于指定行为和2方之间的抽象通信。在设计软件解决方案时,您希望遵循最佳实践和模式来构建它,以便将来更易于维护。

尤其是在Java中,您同时具有抽象类和接口。接口声明了类应该做什么(Java8 +中的接口默认情况下提供了指定行为和实际方法的方法,但我想这还不是您打算的家庭作业。)由于您正在开发游戏,因此可能有必要对游戏进行抽象所有部件都应处理的功能。他们应该知道如何指定位置,知道自己是否仍在游戏中活动,知道适用于游戏的规则。您也可以抽象出游戏中执行的动作。每个运动都有一个或多个特定的部分,它知道何时可以执行以及如何执行自身,甚至如何撤消它。您的游戏班级可能还会有一个列表,其中记录了游戏中动作的历史记录。这样,您可以实现一种简单的方法来将游戏后退到特定点。

您也可以阅读SOLID原理并检查常见的软件设计模式(例如https://refactoring.guru/)来扩展知识。

答案 2 :(得分:0)

通常,您的代码中有一些抽象。这意味着可以将某些行为和数据概括化并封装为某种通用类型-这可以是一个接口。您已经提到了一些-像块一样-可以有一个称为块的接口吗?此外,Motions也可以使用-运动界面吗?

例如,一个Piece接口可以具有一些常用方法,例如:

public interface Piece {
    String getName();
    Position getPosition();
    List<Movement> getAvailableMovements();
    void move(Movement movement);
    BufferdImage getImage();
}

Ppiece将仅实现这些方法,因此拥有一块就可以知道它的名称,位置,图像,可用的移动方式,并且可以移动它。这只是抽象的主张,可能并不完全适合您的设计。但是以这种方式,您可以只使用Piece而不是专门的类来在程序中提供它。