我希望开设两个新课程,以便将它们联系起来。我想创建一个玩家和团队类。我的目标是将一名球员分配到一个球队。基本上我希望使用类中的类作为属性。
我想象我的玩家类别是这样的;
public class Player {
String first_name;
String last_name;
int age;
}
Run Code Online (Sandbox Code Playgroud)
我的团队是这样的;
public class Team {
String Member1;
String Member2;
}
Run Code Online (Sandbox Code Playgroud)
和我的主要课程包括;
Player Player1 = new Player("Peter", "Jensen", 24);
Run Code Online (Sandbox Code Playgroud)
所以我想做的是计算特定球队中我的球员的平均年龄。有什么想法或建议吗?
现实生活中什么是团队?这是一群玩家,所以你需要Team组成Players,然后问一个问题“哪里有最大量的信息来完成平均玩家年龄的计算?” 这些信息放置在Team班级(玩家列表)内,我们需要放置计算班级平均年龄的方法Team。这被称为信息专家原则,是众多优秀的 oop 设计原则之一。
https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#Information_expert
所以这样的话代码就会像这样:
玩家等级:
public class Player {
private String firstName;
private String lastName;
private int age;
public Player(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public String firstName() {
return firstName;
}
public String lastName() {
return lastName;
}
public String age() {
return age;
}
}
Run Code Online (Sandbox Code Playgroud)
团队类别:
public class Team {
private List<Player> players;
Team(List<Player> players) {
this.players = players;
}
public void add(Player player) {
players.add(player);
}
public void remove(Player player) {
players.remove(player);
}
public double averageAge() {
double sum = 0;
double amount = players.size();
for (Player player : players) {
sum += player.age();
}
return sum / amount;
}
}
Run Code Online (Sandbox Code Playgroud)
之后我们就可以以各种方便的方式使用这些类,例如:
public class Test {
public static void main(String[] args) {
Team team = new Team(Arrays.asList(new Player[] {
new Player("Peter", "Jensen", 24),
new Player("Foo", "Bar", 50)
}));
System.out.println(team.averageAge()); // 37
}
}
Run Code Online (Sandbox Code Playgroud)
只需向团队询问球员的平均年龄是多少,团队就会回复您。