监听者设计模式

思想

在这里插入图片描述
一个被监听者对应着多个监听器,当被监听者执行某个触发事件后,就会触发对应的监听器,执行对应的操作。

具体实例

接口

触发事件接口

public interface ICurdEvent {
    //声明事件类型、
    String CRE="create";
    String UPD="update";

    //获取事件源对象
    IListenerable getEventSource();
    //获取事件类型
    String getEventType();
}

监听器接口
监听器接口应该有的功能就是处理事件

public interface IListener {
    //处理事件
    void handle(ICurdEvent event);
}

被监听者
也叫事件源接口,事件源应该有的功能是注册监听器和根据事件触发监听器

public interface IListenerable {
    //注册监听器
    void setListener(IListener listener);
    //触发监听器
    void triggerListener(ICurdEvent event);
}

实现类

触发事件实现类

public class CurdEvent implements ICurdEvent {
    //事件源
    private IListenerable eventSource;
    //事件源执行的方法名称
    private String methodName;
    public CurdEvent(IListenerable eventSource,String methodName) {
        this.eventSource = eventSource;
        this.methodName=methodName;
    }

    //获取事件源对象
    @Override
    public IListenerable getEventSource() {
        return eventSource;
    }
	//获取事件类型
    @Override
    public String getEventType() {
        String eventType=null;
        if(methodName.startsWith("sava")){
            eventType=CRE;
        }else {
            eventType=UPD;
        }
        return eventType;
    }
}

监听器实现类

public class CurdListener implements IListener {
//处理事件
    @Override
    public void handle(ICurdEvent event) {
        String eventType=event.getEventType();
        if(ICurdEvent.CRE.equals(eventType)){
            System.out.println("添加");
        }else {
            System.out.println("更新");
        }
    }
}

被监听者实现类

public class Some implements IListenerable {
    private IListener listener;
    //注册监听器
    @Override
    public void setListener(IListener listener) {
        this.listener=listener;
    }
	//触发监听器
    @Override
    public void triggerListener(ICurdEvent event) {
        listener.handle(event);
    }
	
	//执行操作,触发对应事件
    public void saveStudent(){
        System.out.println("保存学生数据");
        ICurdEvent event=new CurdEvent(this,"saveStudent");
        this.triggerListener(event);
    }
    public void updateStudent(){
        System.out.println("更新学生数据");
        ICurdEvent event=new CurdEvent(this,"updateStudent");
        this.triggerListener(event);
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        //定义事件源
        Some some=new Some();
        //定义监听器
        IListener listener=new CurdListener();
        //事件源注册监听器
        some.setListener(listener);

        some.saveStudent();
        some.updateStudent();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值