gpt4 book ai didi

java - 这些类之间应该如何分配职责?

转载 作者:行者123 更新时间:2023-11-30 09:49:48 26 4
gpt4 key购买 nike

我有三个简单的类用于说明。人们有很多项目,这些项目有很多任务。

public class Person {
private ArrayList<Project> projects;

public Person() {
projects = new ArrayList<Project>();
}

public printTasks() {
//TODO
}
}

public class Project {
private String name;
private ArrayList<Task> tasks;

public Project(String name) {
this.name = name;
tasks = new ArrayList<Task>();
}

public getName() {
return name;
}
}

public class Task {
private String name;
private String description;

public Task() {
tasks = new ArrayList<Task>();
}

public getName() {
return name;
}

public getDescription() {
return description;
}
}

我的问题与实现 Person.printTasks() 的最佳方式有关。我想在标准输出上显示一个人拥有的项目名称列表,并在每个项目之后显示任务名称和描述的列表那个项目有。

  1. 创建 Task.printTask() 并打印出该任务的名称和描述。创建 Project.printTasks() 并打印出项目名称,然后在每个任务上调用 printTask。让 Person.printTasks 在每个项目上调用 printTasks。
  2. 创建 Task.getTaskString() 并将其连接该任务的名称和描述并将其返回。创建 Project.getTasksString() 并创建一个包含项目名称的字符串,然后在每个任务上调用 getTaskString,连接每个结果。让 Person.printTasks() 在每个项目上调用 getTasksString 并打印出每个字符串。
  3. 创建 Project.getTasks() 并让它返回任务的 ArrayList。让 Person.printTasks() 为每个项目调用 Project.getName 和 Project.getTasks(),打印项目名称,然后遍历返回的任务数组,对每个调用 getName() 和 getDescription() 并将它们打印出来。<

有没有最好的方法来处理这个问题,还是真的无关紧要?就我个人而言,我倾向于 2),因为 1) 将对象应如何显示的想法与该对象联系起来,但感觉这应该在一个地方决定,即 Person。这样我就可以轻松地从 stdout 更改为文件。 3) 赋予 Person 对 Task 的直接访问权限,Task 是一个它以前未耦合到的类(至少它只是通过 Project 间接耦合)。

有比这 3 种更好的解决方案吗?

注意:这可能是一个与语言无关的问题,但我碰巧是用 Java 编写的,我想对于不同的语言可能会有不同的最佳解决方案,所以我想回答 < em>至少在 Java 方面解决了这个问题。

最佳答案

访客模式:没人知道怎么打印,打印什么。您只需将项目/人员/任务赋予他们作为访问者对象的任何关系。项目/人员/任务遍历他们拥有/知道的对象并将访问者传递给他们。

访问者做了正确的事情——它知道如何从它访问的对象中访问信息,是否应该打印信息以及在哪里:控制台/文件/数据库或其他,它也知道如何格式化:xml/html/plain text/csv 作为示例浮现在脑海中。

这是您可以随意设计项目层次结构、更改打印目标和格式等。

关于java - 这些类之间应该如何分配职责?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5577228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com