自定义监听器

解决的问题:

现实处理逻辑中,我们经常遇到这种逻辑,当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);
    }

}

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值