java回调函数、以测试String和StringBuffer字符串追加10000次运行时间为例,来演示回到函数的使用方法:
一. 标准版:
1. 回调接口StringFun
package com.xh.callback;
public interface StringFun {
public void exectue();
}
2. 调用者 Caller
package com.xh.callback;public class Caller {
private StringFun stringFun;
public Caller(StringFun stringFun){
this.stringFun = stringFun;
}
public void call(){
long start = System.currentTimeMillis();
this.stringFun.exectue();
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}
3. String程序执行时间测试
package com.xh.callback;
public class StringTest implements StringFun {
@Override
public void exectue() {
String string = "";
for(int i = 0; i < 1000; i++){
string += "abc" + i;
}
string.toString();
}
}
4. StringBuffer执行时间测试
package com.xh.callback;
public class StringBufferTest implements StringFun {
@Override
public void exectue() {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < 1000; i++){
sb.append("abc" + i);
}
sb.toString();
}
}
5. 测试Demo
package com.xh.callback;
public class CallMain {
public static void main(String[] args) {
Caller stringCall = new Caller(new StringTest());
stringCall.call();
Caller stringBufferCall = new Caller(new StringBufferTest());
stringBufferCall.call();
}
}
总结,使用回调的好处:
A. 计算时间的代码更通用,避免了在每个计算法中都要书写的冗余。
B. 如果需要更改计算逻辑或追加修改计算方式,只需要修改call中的方法而不会影响到调用Demo中的调用者。
二. 第二种更精简,我喜欢这种
1. 定义回调接口
package com.xh.fun;
public interface Function {
public void execute();
}
2. 编写回调函数以及使用回到函数
package com.xh.fun;
public class TestString {
public void execute(Function function) {
long start = System.currentTimeMillis();
function.execute();
long end = System.currentTimeMillis();
System.out.println(end - start);
}
public void testString() {
this.execute(new Function() {
@Override
public void execute() {
String string = "";
for (int i = 0; i < 1000; i++) {
string += "abc" + i;
}
string.toString();
}
});
}
public void testStringBuffer() {
this.execute(new Function() {
@Override
public void execute() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 1000; i++) {
sb.append("abc" + i);
}
sb.toString();
}
});
}
}
3. 测试回调
package com.xh.fun;
public class CallMain {
public static void main(String[] args) {
TestString testString = new TestString();
testString.testString();
testString.testStringBuffer();
}
}
回调的好处和第一种方法一样,精简之处一看便知。