接口的回调1-java学习

这篇博客探讨了Java接口回调的概念,将其视为多态的体现,并通过Android开发中的setOnClickListener为例进行说明。同时,文章介绍了观察者模式,强调了它在分离观察者和被观察对象中的作用,以及常见于接口回调的实现方式。通过一个简单的字符串类型判断的示例,帮助读者更好地理解接口回调的应用。

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

在安卓开发的过程中,常常会遇到很多监听事件,setOnClickListener,很多网上的开源框架imageloader(用到了displayImage方法,就需要设置接口回调),或者是项目中遇到的别人写的代码。

作为刚工作的初学者,了解设计模式很重要,有利于读懂别人的代码,以及写出好代码。

================================================

摘:
接口回调, 是Java 多态的一种体现, 可以把使用某一接口的实现类创建的对象的引用, 赋给该接口声明的接口变量中, 那么该接口变量就可以调用被实现的接口中的方法, 当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法.

观察者模式, 是将观察者和被观察的对象分离开, 当被观察的对象产生一定变化的时候, 观察者就会根据哪里产生的变化, 产生了变化, 而进行相应的处理.
大部分观察着模式是用接口回调的方法来实现的.

===============================================


下面写一个简单的demo方便理解:例子:当判断string字符串的类型,有纯数字的字符串,纯字母的字符串,不是纯数字和纯字母的的字符串,以及其他字符串。

话不多说,我们先写一个接口

/**
 * 判断输入类型的接口
 * 
 * @author lollipoppp
 * 
 */
public interface JudgeInputTypeListener {
	// s为纯数字的时候
	public void onTypeIsNumber(String s);

	// s为非纯字母或者纯数字的时候
	public void onTypeIsString(String s);

	// s为纯字母的时候
	public void onTypeIsLetters(String s);

	// s为其他的时候
	public void onTypeError(String s);
}

再写一个类,在类中回调接口的方法

/**
 * 判断输入类型的类
 * 
 * @author lollipoppp
 * 
 */
public class InputType {
	/**
	 *  显示类型的方法
	 * @param s
	 *            字符串
	 * @param listener
	 *            接口
	 */
	public void showType(String s, JudgeInputTypeListener listener) {
		if (s == null || s.length() == 0) {
			listener.onTypeError(s);
		} else if (s.matches("[0-9]+")) {
			listener.onTypeIsNumber(s);
		} else if (s.matches("[a-zA-z]+")) {
			listener.onTypeIsLetters(s);
		} else {
			listener.onTypeIsString(s);
		}
	}
}
好了,接下来我们写个类进行测试,在InputType 类中的showType 方法中,加入自己的监听接口,对应回调的方法里输出

/**
 *  测试类
 * @author lollipoppp
 *
 */
public class Test {
	/**
	 *  程序的入口
	 * @param args
	 */
	public static void main(String[] args) {
		InputType type = new InputType();
		MyJudgeInputTypeListener listener = new MyJudgeInputTypeListener();
		String s = "";
		type.showType(s, listener);
		s = "123456";
		type.showType(s, listener);
		s = "abABcd";
		type.showType(s, listener);
		s = "abc123";
		type.showType(s, listener);
	}
	/**
	 *  自定义一个JudgeInputTypeListener的实现类,对应回调的接口中输出对应的字符串。
	 * @author lollipoppp
	 *
	 */
	public static class MyJudgeInputTypeListener implements
			JudgeInputTypeListener {

		public void onTypeIsNumber(String s) {
			System.out.println(s + "是纯数字");
		}

		public void onTypeIsString(String s) {
			System.out.println(s + "不是纯字符或者纯数字");
		}

		public void onTypeError(String s) {
			System.out.println(s + "为空或者空字符串");
		}

		public void onTypeIsLetters(String s) {
			System.out.println(s + "是纯字符");

		}

	}
}

输出的结果为:

为空或者空字符串
123456是纯数字
abABcd是纯字符
abc123不是纯字符或者纯数字


哪里理解的不对的地方欢迎指出,谢谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值