记得高一那会,我是我们组的组长,我们座位是那种七八个人围在一起拼成一张大桌子的那种(课间可以把书一撤,直接摆瓜子零食high起来,哈哈)。
某天下午的自习课,外面知了声加一圈一圈慢悠悠旋转的风扇使得人有些心烦意乱,我们组的张某人瞥了我一眼,小声对我说了句:“组长,我睡了哈,班主任来了叫我。”“你妹的,一到自习课你就睡,期末考试又要拖我们组后腿。”我对这位张同学真的是实在没办法,班级倒数,我话还没说完,他就已经趴头睡了。这时,我旁边的王同学把没做完的习题一摊,歪过头用她水汪汪的大眼睛看着我:“我也睡一会哈,班主任来了记得叫我。”我每天面对着这群不思进取的组员,真的是恨铁不成钢,每天想着法儿希望组员之间能够互帮互助,共同进步,结果就是肯努力的仍然继续努力,该混吃等死的还是在混吃等死。
过了许久,只见窗户外有一个穿着黑衣服的中年男人径直向教室走过来,我敏锐的觉察到肯定是班主任来了,我赶紧忙戳王同学和张某人:“班主任来了!”
课间————
”组长,刚才自习课多亏了您老人家,这包辣条分你一半,算我孝敬你的。“
”唉,你们能少睡点觉,成绩能提高一点,就不至于太拖小组平均分了。“
”组长,我保证下次一定不睡了好不好?好好学习,向组长您看齐!“
如今细想起来,上面这段记忆,正符合设计模式中的《观察者模式》呀,下面就用代码去描述一下上面的观察者模式。
1.我要把班主任来了这个事件告知张某人和王同学,首先定义一个事件回调接口。
/**
* “班主任来了”事件回调接口
*/
public interface TeacherComeListener {
/**
* 班主任来啦
*/
void onTeachCome(String msg);
}
2.接下来实现张某人和王同学对象类,他们都需要知道班主任来了这个事件,自然要实现TeacherComeListener接口。
/**
* 张同学
*/
public class ZhangStudent implements TeacherComeListener{
// 姓名
private String name;
public ZhangStudent(String name) {
this.name = name;
}
@Override
public void onTeachCome(String msg) {
System.out.println(name + ":" + msg);
}
}
/**
* 王同学
*/
public class WangStudent implements TeacherComeListener {
// 姓名
private String name;
public WangStudent(String name) {
this.name = name;
}
@Override
public void onTeachCome(String msg) {
System.out.println(name +":" + msg);
}
}
3.张某人和王同学都对组长说了,让我在班主任来了第一时间叫醒他们,那我就应该持有他们实现的TeacherComeListener接口,下面是组长类。
public class GroupLeader {
private List<TeacherComeListener> listenerList = new ArrayList<>();
public GroupLeader() {
}
/**
* 组员告诉组长,班主任来了通知一下
* @param listener 组员实现的事件回调接口
*/
public void regist(TeacherComeListener listener) {
listenerList.add(listener);
}
/**
* 通知张某人和王同学
*/
public void notifyTeachComeEvent(){
for (TeacherComeListener listener : listenerList) {
listener.onTeachCome("班主任来啦!");
}
}
}
4.最后我们写代码测试一下
public class Test {
public static void main(String[] args){
// 张某人
ZhangStudent zhangStudent = new ZhangStudent("张某人");
// 王同学
WangStudent wangStudent = new WangStudent("王同学");
// 组长
GroupLeader groupLeader = new GroupLeader();
// 张某人对组长说,班主任来了叫我哈
groupLeader.regist(zhangStudent);
// 王某人对组长说,班主任来了叫我哈
groupLeader.regist(wangStudent);
// 过了一会,班主任来啦,组长快叫醒组员
groupLeader.notifyTeachComeEvent();
}
}
打印结果:
张某人:班主任来啦!
王同学:班主任来啦!
尾巴:
送上一张UML图,希望能够更加直观的理解观察者模式。

网友评论