Java 观察者模式(回调函数)

观察者模式:

当对象间存在一对多关系时,一个对象状态发生变化,则会自动通知依赖它的对象,这种模式属于行为模式中的观察者模式。

在Android开发中,常用的事件监听机制就属于观察者模式。常用的例如onClickListener()与实现View.OnClickListener这个接口都属于观察者模式的具体实现,称为回调方法。

在Swift等语言中,也可以通过Protocol来实现Java中的Interface功能,但是Swift中最常用的还是Clourse(OC中的Block)来完成Java中的匿名类功能。

回调:

回调方法简单来讲就是当我们改变一个对象的状态时,其会自动响应。响应的前提是该对象本身并没有提供相关的响应方法,而是靠特有的接口来实现的。下面以Android中Button、Activity来简单实现这一场景。

先定义一个接口,该接口定义了抽象方法onClick()

public interface OnClickListener {
	void onClick();
}

这个接口就是用来响应Button被点击时的逻辑。下面模拟一下Button的内部结构:

public class MyButton {
	
	@SuppressWarnings("unused")
	private OnClickListener onClickListener;
	private int res;
	
	public MyButton(int res){
		this.res = res;
	}
	
	public void setOnClickListener(OnClickListener onClickListener) {
		this.onClickListener = onClickListener;
	}
	
	public void click(){
		onClickListener.onClick();
	}
}

我们先定义了一个名为MyButton的类,里面存在两个属性,一个为接口的引用,另一个就是Android开发中的 R布局资源文件了。

setOnClickListener()这个方法是为了注册监听事件,click()这个方法是我们为了模拟点击这个抽象过程(因为这是控制台程序,不是GUI程序,不能用鼠标点击事件),在这个方法里面就执行了接口引用的抽象方法,也就是响应的动作。

最后来模拟Activity:

public class MainActivity {
	
	private static int R_id_button = 10001;
	
	public static void main(String[] args){
		MyButton button = new MyButton(R_id_button);
		
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick() {
				// TODO Auto-generated method stub
				System.out.println("Clicked.");
			}
		});
		
		button.click();
	}
}

这里也不写什么生命周期了,直接在main方法里面实例化MyButton即可。完成实例化后,我们发现下面的写法与Android如出一辙:先是调用button对象的注册监听方法,然后new出了一个匿名类,在里面重写了onClick()方法,在这个方法里面执行的内容才是我们真正要完成的逻辑。最后,我们手动模拟了点击这个过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值