readme

Java面向对象程序设计-接口(二)

需求分析

本项目主要目的是练习如何使用接口来提供服务。在之前的项目中,我们实现了学生注册课程的功能。在本项目中,我们继续来实现安排老师授课的功能,继续练习接口的使用。

步骤一

首先,我们需要在com.littlewaterdrop.bean包中声明一个新类Professor,用于表示教授对象。该类有四个私有成员变量:(1) id,字符串类型,用于表示教授的编号;(2) name,字符串类型,用于表示教授的姓名;(3) field,MajorEnum枚举类型;和(4) email,字符串类型,用于表示教授的电子邮箱地址。

MajorEnum枚举类型也是一个新类型,我们需要在com.littlewaterdrop.bean包中自行定义。它包含以下几个枚举值:ComputerScience、Biology、Mathematics、Physics、Chemistry和NA。前五个分别表示相应的学科;NA表示其他(不涉及任何学科)。

Professor类有一个构造函数,它接受四个参数;id、name、field和email,分别用于初始化Professor对象的成员变量。

Professor类还有getter和setter方法,用于访问和修改四个成员变量。

步骤二

然后,在包com.littlewaterdrop.factory中创建一个新类ProfessorFactory。该类是公有类(public)。该类声明了一个公有静态方法newProfessor()。该方法用于创建Professor类对象。该方法接受四个参数,分别为id、name、field和email,用于初始化新生成的Professor对象。这种创建对象的方法被称为工厂模式

public class ProfessorFactory {
    public static Professor newProfessor(String id, String name, MajorEnum field, String email);
}

步骤三

在本项目的第三个步骤中,我们将声明三个接口,用于表示可分配的任务(Assignable)、执行者(Assignee)和任务分配者(AssignmentPlanner)。

Assignable和Assignee是包com.littlewaterdrop.registration中的两个新公有接口。它们包含一个成员方法getId(),用于获取当前对象的唯一id。该方法的原型如下所示。

String getId();

AssignmentPlanner也是com.littlewaterdrop.registration包中的一个新的公有接口。该接口有一个成员方法,完成任务分配的功能。该方法的原型如下所示,它有两个输入参数;第一个参数是Assignee,表示任务执行者;第二个参数为Assignable,表示任务对象。

void assign(Assignee assignee, Assignable assignable);

步骤四

在定义了上述三个新接口之后,我们再来实现这些接口。首先,修改com.littlewaterdrop.bean.Professor类,让其实现Assignee接口。然后,修改com.littlewaterdrop.bean.Course类,让其实现Assignable接口。最后,修改com.littlewaterdrop.registration.StudentCenter类,让其实现AssignmentPlanner接口,并新增assign()成员方法。

在StudentCenter中新增两个Map私有成员变量,用于实现教授和课程之间的双向映射。

  1. 第一个成员变量为professorsToCourses;Key是字符串类型,表示教授id;Value是字符串类型的集合(Set),表示该教授安排的课程id。这个成员变量用于实现教授到课程的映射。
  2. 第二个成员变量为coursesToProfessors;Key是字符串类型,表示课程id;Value是字符串类型的集合(Set),表示课程所安排的教授id。这个成员变量用于实现课程到教授的映射。

assign()方法的功能为:当输入教授已经安排了输入的课程任务时,assign()方法不用做任何事情。当输入的教授未安排输入的课程任务时,assign()方法会向上述两个成员变量中添加新记录。

参考文档

  1. Java编程语言的基本概念
  2. 设计模式
  3. Maven工程管理工具
Copyright  2019 Little Waterdrop, LLC. All Rights Reserved.