一、介绍
回调在程序编程中是一种比较常用的技术,他可以让一个被调用者根据调用者的意图处理业务。在Java语言中回调的机制主要通过接口回调机制来实现。语法上对于初学者存在一定的困难。下面通过一个简单的例子,阐述一下接口回调在Java中的实现方式。
二、类图
在接口回调中会设计两个类,和一个接口。我们设计一个植物类,养护类,以及一个接口用来实现更新植物的高度。类图设计如下:
植物类Plant有两个属性,三个方法:
属性:length:植物的高度,care:植物的养护对象;
方法:initCare():为植物配置养护对象;startCare()开始培养;showLength() 观察植物的高度。
养护类Care有一个属性,一个方法:
listener,养护回调接口
Care(OnCareOkListener listener):构造函数,创建对象
takeCare():养护,其中将会调用listener接口的方法
OnCareOKListener接口:
申明了一个方法updateLength(),用以被Plant类回调。
三、实现
具体实现如下:
OnCareOkListener.java
package com.hnevc.interfacerecall;
public interface OnCareOkListener {
void updateLength(int length);
}
Care.java
package com.hnevc.interfacerecall;
import java.util.Random;
public class Care {
OnCareOkListener listener;
public Care(OnCareOkListener listener){
this.listener = listener;
}
public void takeCare(){
Random random = new Random();
int growth = random.nextInt(4);
String[] careMethod= {"浇水","施肥","松土","晒太阳"};
listener.updateLength(growth);
System.out.println("植物养护:"+careMethod[growth]+",高度增加"+growth);
}
}
Plant.java
package com.hnevc.interfacerecall;
public class Plant {
public int length=0;//植物的长度
public Care care=null; //养护
public void initCare(){
care = new Care(new OnCareOkListener() {
@Override
public void updateLength(int length) {
// TODO Auto-generated method stub
Plant.this.length += length;
}
});
}
public void startCare(){
care.takeCare();
}
public void showLength(){
System.out.println("植物养护后的高度"+length);
}
}
Test.java
package com.hnevc.interfacerecall;
public class Test {
public static void main(String[] args) {
Plant plant = new Plant();
plant.initCare();
for (int i = 0; i < 4; i++) {
plant.startCare();
}
plant.showLength();
}
}