在安卓开发的过程中,常常会遇到很多监听事件,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不是纯字符或者纯数字
哪里理解的不对的地方欢迎指出,谢谢