观察者模式详解:老师和学生的关系

什么是观察者模式?

百科是这样描述的:观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式).

下面我给出大家我的理解,观察者模式就类似与同学和老师的关系一样。


老师就是被观察的对象,而同学们都是老师的观察者。将这一类比用到课堂上,可以说是更加的容易理解。

例如:

老师是一个被观察的对象,老师在教师里面给同学们上课,老师自然知道这个教室里面有多少个同学以及每个同学的位置或者名字

而每个同学都是老师的一个观察者,当老师讲课的时候,当然所有的同学都能听到。

所以总结来看:老师拥有多个学生,老师可以看到多个学生,每个学生都可以听到老师讲的课。


下面给出大家实现代码,如果大家有什么不懂地方,尽管提出来,我会尽我所能给大家解答的。

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("请大家记录笔记");
	}
}



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值