解决的问题:
现实处理逻辑中,我们经常遇到这种逻辑,当msg="放假了"的时候,Teacher,Student,Parent分别做出相应的动作(doMyEvent)
一般这样写:
if( msg.equalsIgnoreCase("放假了")){
teacher.doMyEvent();
student.doMyEvent();
parent.doMyEvent();
}
每次有消息发送过来,都要写这几行,显然太麻烦,我们采用监视器,注册一次,就可对消息进行分发
1. 定义接口
public interface MyListener {
public void doMyEvent();
}
2.定义Teacher/Student/Parent的实现类
public class TeacherListener implements MyListener {
@Override
public void doMyEvent() {
// TODO Auto-generated method stub
System.out.println("老师舒心了");
}
}
public class StudentListener implements MyListener {
@Override
public void doMyEvent() {
// TODO Auto-generated method stub
System.out.println("学生开心了");
}
}
public class ParentListener implements MyListener {
@Override
public void doMyEvent() {
// TODO Auto-generated method stub
System.out.println("父母闹心了");
}
}
3.定义消息分发器
public class MyNotice {
//监听器容器
private List<MyListener> listener = new ArrayList<MyListener>();
//给事件绑定监听器
public void addMyListener(MyListener ren) {
listener.add(ren);
}
//事件触发器
public void tellMe(String msg) {
if(msg.equalsIgnoreCase("放假了")) {
Iterator<MyListener> iterator = listener.iterator();
while(iterator.hasNext()) {
MyListener ren = iterator.next();
ren.doMyEvent();
}
}
}
}
4.定义main函数
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyNotice notice = new MyNotice();
notice.addMyListener(new TeacherListener());
notice.addMyListener(new StudentListener());
notice.addMyListener(new ParentListener());
String msg = "放假了";
notice.tellMe(msg);
}
}