我有以下简单的课程
public class Athlete
{
int Code;
String Name;
String Surname;
Date DateOfBirth;
public Athlete() {}
}
public class Game
{
int Code;
String Gamename;
Date DateOfGame;
public Game() {}
}
public class Participates
{
int Code;
Game game;
Athlete athlete;
float Performance;
boolean Valid;
public Participates() {}
}
如果我将参赛者课程宣布为运动员实施的界面或者这样好吗? (运动员可以参加很多比赛)
编辑1:这是我的代码示例,只是为了说明我的观点
编辑2:我的问题是关于此代码的优化,因此如果需要,不禁止对字段和方法进行更改
答案 0 :(得分:1)
应该使用接口来描述行为。参与者或任何这些没有方法的类都不是这种情况。
如果要强制实现它的类具有一组特定的方法,请使用接口。
然而,只有在不同阶段由不同团队开发的应用程序或使用某些框架时,接口才是有意义的概念。如果你要在一个会话上自己开发一个应用程序,而不使用任何框架,那么使用它们可能没有任何意义。除非你想把它作为一种练习。
答案 1 :(得分:1)
您可以考虑根据以下内容分解对象模型:
然后考虑特定对象的组合,并使用接口来处理多个对象类型可能合理实现的方法。
您有一个Athelete
课程(可能应该是person
的角色,因为您有时可能会有referee
。你有一个Game
类(看起来不错,它看起来像是包含一个事件(当游戏发生时)。
你定义了一个参与类..这看起来不是一个好类。您似乎想要将参与者封装在游戏中......这可以通过某种方法更好地处理。
游戏类(包括isParticipant方法)
package com.example.athletics;
import java.util.ArrayList;
import java.util.Date;
public class Game {
// Object fields
int code;
String name;
Date gameDate; // perhaps an interval would be better here
ArrayList<Athlete> players;
public Game() {
players = new ArrayList<Athlete>();
};
public void addPlayer(Athlete athlete) {
players.add(athlete);
}
public boolean isParticipant(Athlete athlete) {
// TODO improve performance by creating a HashMap perhaps?
boolean result = false;
for (int i=0; i < players.size(); i++) {
if (athlete.equals(players.get(i))) {
result = true;
break;
}
}
return result;
}
}
运动员课程
package com.example.athletics;
import java.util.Date;
public class Athlete {
// Object fields
int code;
String Name;
String surName;
Date birthDate;
public Athlete(){}
// TODO methods to identify the Athlete
public boolean equals(Athlete other) {
if (other == null) {
return false;
} else {
return code == other.getCode();
}
}
public int getCode() {return code;}
}
答案 2 :(得分:0)
我认为您不需要界面,但您需要延长参赛者的运动员。如果运动员参加比赛,运动员不应继承参赛者吗?这似乎是合乎逻辑的。
你也可以让参加一个没有任何继承人的课程,只需用它代表运动员等等。
答案 3 :(得分:0)
如果您没有计划创建两个实施,请不要添加界面。
如果您稍后发现需要第二个实现,请使用重构来提取接口,并添加第二个实现。