目 的:理解掌握四种通知及通过配置文件进行通知加载。 实验内容:假设学生为核心类,学生做的事情是代理类。学生需要做的核心业务有:课堂学习(study)、做家庭作业(homeWork);需要做的非核心业务为:准备上课(打开书本、预习),听老师讲课(做笔记、完成课堂练习),上课结束(收拾书包、带走垃圾);准备做家庭作业(复习今天课堂所学知识),开始做家庭作业(打开作业本、写作业、检查改错、预习),完成家庭作业(收拾书本)。 根据上面描述场景,分别通过四种通知及配置文件完成代码编写及测试。
时间: 2023-06-10 17:08:18 浏览: 94
四种通知分别是:邮件通知、短信通知、微信通知和日志记录。我们可以通过配置文件来选择使用哪种通知方式。
首先,我们需要创建一个学生类,包含课堂学习和做家庭作业两个核心业务,以及准备上课、听老师讲课、上课结束、准备做家庭作业、开始做家庭作业、完成家庭作业等非核心业务。代码如下:
```java
public class Student {
public void study() {
System.out.println("学生正在课堂学习...");
}
public void homeWork() {
System.out.println("学生正在做家庭作业...");
}
public void prepareForClass() {
System.out.println("学生正在准备上课...");
}
public void listenToTeacher() {
System.out.println("学生正在听老师讲课...");
}
public void classFinished() {
System.out.println("学生正在收拾书包...");
}
public void prepareForHomework() {
System.out.println("学生正在复习今天课堂所学知识...");
}
public void startHomework() {
System.out.println("学生正在开始做家庭作业...");
}
public void finishHomework() {
System.out.println("学生正在收拾书本...");
}
}
```
接下来,我们需要创建一个代理类,来代表学生完成核心业务和非核心业务。在代理类中,我们可以使用四种通知方式来通知学生或其他人员所完成的任务。代码如下:
```java
import java.util.Properties;
public class StudentProxy {
private Student student;
private Properties properties;
public StudentProxy(Student student, Properties properties) {
this.student = student;
this.properties = properties;
}
public void study() {
student.study();
sendNotification("学生正在课堂学习...");
}
public void homeWork() {
student.homeWork();
sendNotification("学生正在做家庭作业...");
}
public void prepareForClass() {
student.prepareForClass();
sendNotification("学生正在准备上课...");
}
public void listenToTeacher() {
student.listenToTeacher();
sendNotification("学生正在听老师讲课...");
}
public void classFinished() {
student.classFinished();
sendNotification("学生正在收拾书包...");
}
public void prepareForHomework() {
student.prepareForHomework();
sendNotification("学生正在复习今天课堂所学知识...");
}
public void startHomework() {
student.startHomework();
sendNotification("学生正在开始做家庭作业...");
}
public void finishHomework() {
student.finishHomework();
sendNotification("学生正在收拾书本...");
}
private void sendNotification(String message) {
String notificationType = properties.getProperty("notification.type");
if (notificationType.equals("email")) {
sendEmailNotification(message);
} else if (notificationType.equals("sms")) {
sendSmsNotification(message);
} else if (notificationType.equals("wechat")) {
sendWeChatNotification(message);
} else if (notificationType.equals("log")) {
logNotification(message);
}
}
private void sendEmailNotification(String message) {
String email = properties.getProperty("notification.email.address");
System.out.println("发送邮件通知至:" + email);
System.out.println("通知内容:" + message);
}
private void sendSmsNotification(String message) {
String phone = properties.getProperty("notification.sms.phone");
System.out.println("发送短信通知至:" + phone);
System.out.println("通知内容:" + message);
}
private void sendWeChatNotification(String message) {
String weChatId = properties.getProperty("notification.wechat.id");
System.out.println("发送微信通知至:" + weChatId);
System.out.println("通知内容:" + message);
}
private void logNotification(String message) {
System.out.println("记录日志:" + message);
}
}
```
在代理类中,我们使用了一个 Properties 对象来读取配置文件中的通知方式及相关信息。在 sendNotification 方法中,根据配置文件中的通知方式来选择使用哪种通知方式,并将通知内容作为参数传递给相应的通知方法中。
最后,我们需要创建一个配置文件来指定通知方式及相关信息。在本例中,我们使用 notification.properties 文件来配置通知方式及相关信息。代码如下:
```properties
# 通知方式,可选值:email、sms、wechat、log
notification.type=email
# 邮件地址
notification.email.address=example@example.com
# 短信电话号码
notification.sms.phone=12345678901
# 微信ID
notification.wechat.id=example
```
使用方法如下:
```java
public class Main {
public static void main(String[] args) {
Student student = new Student();
Properties properties = new Properties();
try {
properties.load(new FileInputStream("notification.properties"));
} catch (IOException e) {
e.printStackTrace();
}
StudentProxy studentProxy = new StudentProxy(student, properties);
studentProxy.study();
studentProxy.homeWork();
}
}
```
在主方法中,我们创建了一个学生对象和一个 Properties 对象,并将 notification.properties 文件读取到 Properties 对象中。然后,我们创建了一个代理类对象,并将学生对象和 Properties 对象传递给代理类构造方法中。最后,我们调用代理类的 study 和 homeWork 方法来完成核心业务,并使用配置文件中指定的通知方式来通知相关人员。