观察者模式详解:老师和学生的关系
2013-05-27 21:39
423 查看
什么是观察者模式?
百科是这样描述的:观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式).
下面我给出大家我的理解,观察者模式就类似与同学和老师的关系一样。
老师就是被观察的对象,而同学们都是老师的观察者。将这一类比用到课堂上,可以说是更加的容易理解。
例如:
老师是一个被观察的对象,老师在教师里面给同学们上课,老师自然知道这个教室里面有多少个同学以及每个同学的位置或者名字
而每个同学都是老师的一个观察者,当老师讲课的时候,当然所有的同学都能听到。
所以总结来看:老师拥有多个学生,老师可以看到多个学生,每个学生都可以听到老师讲的课。
下面给出大家实现代码,如果大家有什么不懂地方,尽管提出来,我会尽我所能给大家解答的。
TeahcerInterface.java
StudentInterface.java
Teacher.java
Student.java
百科是这样描述的:观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式).
下面我给出大家我的理解,观察者模式就类似与同学和老师的关系一样。
老师就是被观察的对象,而同学们都是老师的观察者。将这一类比用到课堂上,可以说是更加的容易理解。
例如:
老师是一个被观察的对象,老师在教师里面给同学们上课,老师自然知道这个教室里面有多少个同学以及每个同学的位置或者名字
而每个同学都是老师的一个观察者,当老师讲课的时候,当然所有的同学都能听到。
所以总结来看:老师拥有多个学生,老师可以看到多个学生,每个学生都可以听到老师讲的课。
下面给出大家实现代码,如果大家有什么不懂地方,尽管提出来,我会尽我所能给大家解答的。
TeahcerInterface.java
package com.design.observer; /** * @author 鲁志明 E-mail: 13688601037@139.com * @version 创建时间:2013-5-27 下午9:06:04 * */ public interface TeahcerInterface { // 增加学生 public void add(StudentInterface student); // 移除学生 public void remove(StudentInterface student); // 教授知识 public void teachTechnology(String notes); }
StudentInterface.java
package com.design.observer; /** * @author 鲁志明 E-mail: 13688601037@139.com * @version 创建时间:2013-5-27 下午9:06:25 * */ public interface StudentInterface { // 听课 public void listen(String notes); }
Teacher.java
package com.design.observer; import java.util.ArrayList; import java.util.List; /** * @author 鲁志明 E-mail: 13688601037@139.com * @version 创建时间:2013-5-27 下午9:09:55 * */ public class Teacher implements TeahcerInterface { //保存所有的学生,因为老师可以看到所有的学生,可以给所有的学生上课,即可以给所有的学生通知 private List<StudentInterface> students = new ArrayList<StudentInterface>(); private String teacherName; public Teacher(String teacherName) { this.teacherName = teacherName; } @Override public void add(StudentInterface student) { this.students.add(student); } @Override public void remove(StudentInterface student) { this.students.remove(student); } @Override // 遍历老师的学生,告诉学生老师上课了 public void teachTechnology(String notes) { for(StudentInterface student : this.students) { // 既然老师上课了,学生就应该听课了 student.listen(this.teacherName+"告诉大家写:"+notes); student.listen(teacherName+"您好,我是"+((Student)student).getStudentName()+"我已经把笔记:"+"'"+notes+"'"+"写完了"); } } }
Student.java
package com.design.observer; /** * @author 鲁志明 E-mail: 13688601037@139.com * @version 创建时间:2013-5-27 下午9:13:32 * */ public class Student implements StudentInterface { private String studentName; public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public Student(String studentName) { this.studentName = studentName; } //听课 @Override public void listen(String notes) { System.out.println(notes); } }UseDemo.java
package com.design.observer; /** * @author 鲁志明 E-mail: 13688601037@139.com * @version 创建时间:2013-5-27 下午9:14:10 * */ public class UseDemo { public static void main(String[] args) { // 生成一个老师 TeahcerInterface teacher = new Teacher("李老师"); // 生成两个学生 StudentInterface student1 = new Student("同学1"); StudentInterface student2 = new Student("同学2"); // 老师要给这连个学生上课 teacher.add(student1); teacher.add(student2); // 老师开始上课 teacher.teachTechnology("请大家记录笔记"); } }
相关文章推荐
- 二、观察者模式(老师与学生的故事)
- 【GOF23设计模式】_建造者模式详解_类图关系JAVA232
- 设计模式之观察者模式详解
- (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
- 观察者模式_OBSERVER_案例详解
- 插件系统[4]·关系模式-万能观察者
- 插件系统[4]·关系模式-万能观察者
- 观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
- Php-SPL库中的观察者模式接口详解
- Android编程设计模式之观察者模式实例详解
- 插件系统[4]·关系模式-万能观察者
- 模式二:观察者模式(Observer Pattern)——实现一对多关系
- cocos2dx 观察者模式详解
- 详解Python设计模式编程中观察者模式与策略模式的运用
- php设计模式之观察者模式的应用详解
- 设计模式详解之观察者模式
- 设计模式与泡mm的关系之Observer观察者模式及再思考
- C++ 实现观察者(Observer)模式详解
- C#中利用代理实现观察者设计模式详解
- 23种设计模式 第三部分 关系模式(3)观察者模式