面试题答案
一键面试以下是使用Java语言实现上述要求的代码示例:
- 定义任务状态枚举:
public enum TaskStatus {
TODO, IN_PROGRESS, COMPLETED
}
- 定义任务接口:
public interface TaskInterface {
String getTaskName();
TaskStatus getTaskStatus();
Project getProject();
void setTaskStatus(TaskStatus status);
}
- 实现
Task
类:
public class Task implements TaskInterface {
private String taskName;
private TaskStatus taskStatus;
private Project project;
public Task(String taskName, TaskStatus taskStatus, Project project) {
this.taskName = taskName;
this.taskStatus = taskStatus;
this.project = project;
}
@Override
public String getTaskName() {
return taskName;
}
@Override
public TaskStatus getTaskStatus() {
return taskStatus;
}
@Override
public Project getProject() {
return project;
}
@Override
public void setTaskStatus(TaskStatus status) {
this.taskStatus = status;
}
}
- 实现
Project
类:
import java.util.ArrayList;
import java.util.List;
public class Project {
private String projectName;
private List<TaskInterface> tasks = new ArrayList<>();
public Project(String projectName) {
this.projectName = projectName;
}
public void addTask(TaskInterface task) {
if (task.getProject() == this) {
tasks.add(task);
} else {
throw new IllegalArgumentException("Task does not belong to this project");
}
}
public void removeTask(TaskInterface task) {
if (tasks.contains(task)) {
tasks.remove(task);
task.setTaskStatus(TaskStatus.COMPLETED); // 处理任务状态变更
}
}
public List<TaskInterface> getTasks() {
return tasks;
}
}
你可以通过以下方式测试这些代码:
public class Main {
public static void main(String[] args) {
Project project = new Project("Sample Project");
Task task = new Task("Task 1", TaskStatus.TODO, project);
project.addTask(task);
System.out.println("Tasks in project: " + project.getTasks().size());
project.removeTask(task);
System.out.println("Tasks in project after removal: " + project.getTasks().size());
}
}
以上代码首先定义了任务状态的枚举类型,然后通过接口TaskInterface
约束了Task
类的结构。Task
类实现了该接口,Project
类实现了添加任务和移除任务的方法,并在移除任务时处理了任务状态变更的逻辑。在确保任务添加到正确项目时,通过检查任务所属项目是否与当前项目一致来实现。最后通过Main
类进行简单测试。
若使用其他编程语言,实现思路类似,但语法会有所不同。例如在Python中,可通过抽象基类和抽象方法来实现类似接口的功能,以下是Python示例:
from abc import ABC, abstractmethod
class TaskStatus:
TODO = "TODO"
IN_PROGRESS = "IN_PROGRESS"
COMPLETED = "COMPLETED"
class TaskInterface(ABC):
@abstractmethod
def get_task_name(self):
pass
@abstractmethod
def get_task_status(self):
pass
@abstractmethod
def get_project(self):
pass
@abstractmethod
def set_task_status(self, status):
pass
class Task(TaskInterface):
def __init__(self, task_name, task_status, project):
self.task_name = task_name
self.task_status = task_status
self.project = project
def get_task_name(self):
return self.task_name
def get_task_status(self):
return self.task_status
def get_project(self):
return self.project
def set_task_status(self, status):
self.task_status = status
class Project:
def __init__(self, project_name):
self.project_name = project_name
self.tasks = []
def add_task(self, task):
if task.get_project() == self:
self.tasks.append(task)
else:
raise ValueError("Task does not belong to this project")
def remove_task(self, task):
if task in self.tasks:
self.tasks.remove(task)
task.set_task_status(TaskStatus.COMPLETED)
def get_tasks(self):
return self.tasks
if __name__ == "__main__":
project = Project("Sample Project")
task = Task("Task 1", TaskStatus.TODO, project)
project.add_task(task)
print("Tasks in project:", len(project.get_tasks()))
project.remove_task(task)
print("Tasks in project after removal:", len(project.get_tasks()))
Python示例通过abc
模块中的抽象基类和抽象方法来模拟接口功能,Task
类继承抽象基类并实现抽象方法,Project
类实现添加和移除任务的逻辑,并在移除任务时处理任务状态变更。最后在if __name__ == "__main__":
块中进行测试。