java 观察者模式

观察者模式顾名思义就是观察一个对象的变化并且做相应的动作。

举个例子:

一个学生可以有学习,睡觉的动作,但是如果在他做这些事情之前他妈妈提醒他下面该作甚么。一旦他学习,就提醒他要先预习课程,一旦他睡觉就提醒他要先洗脚。

我们来先定义一个学生实体:

public class Student {
//学生名
private String name;
private StudentListener listener;
public String getName() {
return name;
}
public Student(String name){
this.name=name;
}
public void study(){
//先看看有没有在监视你,如果有的话,就会提醒你睡觉前作甚么
if (this.listener!=null) {
this.listener.preStudy(new StudentEvnet(this));
}
System.out.println(name+":学习");
}
public void sleep(){
//先看看有没有在监视你,如果有的话,就会提醒你睡觉前作甚么
if (this.listener!=null) {
this.listener.preSleep(new StudentEvnet(this));
}
System.out.println(name+":睡觉");
}
//申请我要被妈妈监视的入口
public void addStudentListener(StudentListener listener){
this.listener=listener;

}


}

定义一下监视的事件源也就是被监视者:

public class StudentEvnet {
private Object source;


public StudentEvnet(Object source) {
this.source = source;
}


public Object getSource() {
return this.source;
}
}



定义一下监视后的动作:

public interface StudentListener {
void preStudy(StudentEvnet e);
void preSleep(StudentEvnet e);
}

有了这些我们就可以具体实现:

public class Main {
public static void main(String[] args) {
Student st = new Student("dsp");
st.addStudentListener(new StudentListener() {
public void preStudy(StudentEvnet e) {
// TODO Auto-generated method stub
Student st = (Student) e.getSource();
System.out.println(st.getName() + ":学习前先看书");
}


public void preSleep(StudentEvnet e) {
Student st = (Student) e.getSource();
System.out.println(st.getName() + ":学习前先洗脚");
}
});
st.sleep();
st.study();
}
}


运行结果:

dsp:睡觉前先洗脚
dsp:睡觉
dsp:学习前先看书
dsp:学习


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值