21-1 观察者模式讲解
21-2 观察者模式coding
这个就是被观察者对象:
public class Course extends Observable {
private String courseName;
public Course(String courseName) {
this.courseName = courseName;
}
public String getCourseName() {
return courseName;
}
public void produceQuestion(Course course,Question question) {
System.out.println(question.getUserName()+"在"+course.getCourseName()+"提交了一个问题 ");
setChanged();
notifyObservers(question);
}
}
一个问题类:
public class Question {
private String userName;
private String questionContent;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getQuestionContent() {
return questionContent;
}
public void setQuestionContent(String questionContent) {
this.questionContent = questionContent;
}
}
还有一个观察者类:
public class Teacher implements Observer {
private String teacherName;
public Teacher(String teacherName) {
this.teacherName = teacherName;
}
@Override
public void update(Observable o, Object arg) {
Course course = (Course) o;
Question question = (Question) arg;
System.out.println(teacherName+"老师的"+course.getCourseName()+"课程接收到一个"+question.getUserName()+"同学提交的问答:"+question.getQuestionContent());
}
}
现在,我们来写上一个测试类:
public class Test {
public static void main(String[]args){
Course course = new Course("Java设计模式精讲");
Teacher teacher = new Teacher("Alpha");
course.addObserver(teacher);
//业务逻辑代码
Question question = new Question();
question.setUserName("ldc");
question.setQuestionContent("Java的主函数如何编写");
course.produceQuestion(course, question);
}
}
执行结果如下:
ldc在Java设计模式精讲提交了一个问题
Alpha老师的Java设计模式精讲课程接收到一个ldc同学提交的问答:Java的主函数如何编写
现在的类图为:这三个类就