3 回答
TA贡献1995条经验 获得超2个赞
对接口进行编程始终是一种好习惯,因为它将类形式化为具有一组所需的方法。它还可以收集实现了通用接口的类以协同工作。想象一下,您有许多具有 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);
}
TA贡献1779条经验 获得超6个赞
任何类型的编程语言中的接口都是指定两方之间行为和抽象通信的合同。当您设计软件解决方案时,您希望按照最佳实践和模式构建它,以便将来更容易维护。
特别是在 Java 中,您同时拥有抽象类和接口。接口声明了一个类应该做什么(Java8+ 中的接口提供了指定行为的方法,默认情况下是实际方法,但我猜你的家庭作业还没有打算这样做。)由于您正在开发游戏,因此可能有兴趣抽象所有部分都应该处理的功能。他们应该知道如何给出他们的位置,知道他们是否仍然活跃在游戏中,知道适用于它的规则。您还可以抽象游戏期间执行的动作。每个动作都有其适用的特定部分或部分,知道它何时可以执行以及如何执行自身,甚至如何撤消它。你的游戏类也可以有一个列表来保存游戏中的动作历史。
您可以通过阅读 SOLID 原则和检查常见的软件设计模式(例如https://refactoring.guru/)来扩展您的知识。
TA贡献1848条经验 获得超10个赞
通常,您的代码中有一些抽象。这意味着一些行为和数据可以被概括并封装在一些通用类型中——这可能是一个接口。你已经提到了一些——比如碎片——有没有一个叫做 Piece 的界面?还有运动 - 是否有一个名为运动的界面?
例如,一个 Piece 接口可能有一些常见的方法,例如:
public interface Piece {
String getName();
Position getPosition();
List<Movement> getAvailableMovements();
void move(Movement movement);
BufferdImage getImage();
}
而 Piece 只会实现这些方法,因此拥有一块你知道它的名称、位置、图像、可用动作并且你可以移动它的部件。这只是抽象的命题,可能不完全适合您的设计。但是以这种方式,您可以只使用 Piece 而不是专门的类,在您的程序中提供它。
添加回答
举报