运用观察者模式的java回调监听Listenner

本文探讨了Java中的监听回调机制,该机制基于观察者设计模式。当在被监听对象上触发事件时,会调用已注册监听器的回调方法。文中提供了一段观察者模式的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中的监听回调机制说到底是一种观察者设计模式,通过向被监听者对象内部注册一个监听器接口对象,在被监听者的事件函数中调用监听器的回调方法,这样在客户端代码触发被监听者的事件函数时,执行回调方法。

//监听器接口
interface ClickListenner{
	//回调方法
        void onclick();
}

class MyButton{
	private ClickListenner listenner =null ;
	//注册监听器
	public void setListenner(ClickListenner listenner){
		this.listenner = listenner;
	}
	//触发函数(业务方法体)
	public void click() throws Exception{
		int i=1;
		System.out.println("写自己的业务逻辑"); //可以写上自己业务处理逻辑
		if(i==2)                              //如果业务逻辑执行出错,则抛出异常,这样可以控制回调函数的执行
		throw new Exception("自定义业务出错");
		listenner.onclick();
	}
	
}

public class ListennerDemon {
		public static void main(String[] args) throws Exception {
			MyButton button = new MyButton();
			button.setListenner(new ClickListenner() {   //向按钮注册监听器
				
				@Override
				public void onclick() {              //实现自己的回调方法体
					// TODO Auto-generated method stub
					System.out.println("已点击按钮");
				}
			});
			button.click();                               //触发
		}
}

下面贴上一段观察者模式设计代码

class Target {
	List<Observe> observers = new ArrayList<Observe>();
	
	private  int status;
	
	public void addObserver(Observer observer){
		observers.add(observer);
	}
	
	public void setStatus(int status){
		this.status = status;
		for(Observe observer : observers){
			observer.change();
		}
	}
}

interface Observe{
	void observer(Target target);
	void change();
}

class Observer implements Observe{
	private String observerName;
	
	public Observer(String observename) {
		// TODO Auto-generated constructor stub
		this.observerName = observename;
	}
	
	public void observer(Target target){
		target.addObserver(this);
	}
	
	public void change(){
		System.out.println(observerName+"观察者检测到目标发生变化");
	}
}



public class ObserverDemon {
		public static void main(String[] args) {
			Target target = new Target();
			Observer observer1 = new Observer("observer1");
			Observer observer2 = new Observer("observer2");
			Observer observer3 = new Observer("observer3");
			Observer observer4 = new Observer("observer4");
			target.addObserver(observer1);
			target.addObserver(observer2);
			target.addObserver(observer3);
			target.addObserver(observer4);
			
			target.setStatus(1);
		}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值