Java的回调机制实例详解
本文实例讲述了Java的回调机制。分享给大家供大家参考,具体如下:
一 代码
interface CallBack // 回调接口
{
void methodToCallBack( ); //回调方法
}
class CallBackImpl implements CallBack // 实现回调接口和回调方法
{
public void methodToCallBack( )
{
System.out.println("I've been called back");
}
}
public class Caller
{
public void register(CallBack callback) // 注册回调接口
{
callback.methodToCallBack( ); // 通过回调接口调用回调方法
}
public static void main(String[] args)
{
Caller caller = new Caller( ); //B处
CallBack callBack = new CallBackImpl( ); //A处
caller.register(callBack); //C处
}
}
二 运行
I've been called back
三 说明
回调机制的真正意图,就是实现控制反转,通过控制反转。对象在被创建的时候(如A处),由一个能够调控系统内所有对象的外界实体(如B处的caller),将其所依赖对象的引用传递给功能方法体(如C处的callBack,被送入到register)。
同一个接口,可以有不同的实现类,从而使得这些不同的实现类,可以定义众多不同的对象,而这些不同的对象会被按需注入功能方法块register。在被调用前,这些对象永远处于等待调用状态,直到有一天被回调。
四 代码
import java.awt.Rectangle;
interface Measurer
{
// 这个anObject,并不明确。不明确的用意是,先不绑定任何特定的对象
double measure( Object anObject );
}
// 把抽象的measure方法具体化
class AreaMeasurer implements Measurer
{
public double measure(Object anObject)
{
// 把抽象的对象明确化,由于Object对象是所有对象的鼻祖,所以,它可以化身任何对象
Rectangle aRectangle = (Rectangle) anObject;
double area = aRectangle.getWidth() * aRectangle.getHeight();
return area;
}
}
class Car
{
private double price;
private double taxRate;
Car(double price, double taxRate)
{
this.price = price;
this.taxRate = taxRate;
}
public double getPrice()
{
return price;
}
public double getRate()
{
return taxRate;
}
}
class CarMeasurer implements Measurer
{
public double measure(Object anObject)
{
Car aCar = (Car) anObject;
double totalPrice = aCar.getPrice() * (1 + aCar.getRate());
return totalPrice;
}
}
class Data
{
public static double average(Object[] objects, Measurer meas) // 前者提供数据,后者提供方法
{
double sum = 0.0;
for (Object obj : objects)
{
sum = sum + meas.measure(obj);
}
if (objects.length > 0)
{
return sum / objects.length;
} else {
return 0;
}
}
}
public class callBackDemo
{
public static void main(String[] args)
{
Measurer areaMeas = new AreaMeasurer();
Rectangle[] rects = new Rectangle[]
{
new Rectangle(5, 10, 20, 30),
new Rectangle(10, 20, 30, 40),
new Rectangle(20, 30, 5, 15)
};
double averageArea = Data.average(rects, areaMeas);
System.out.println("average area is: " + averageArea);
Measurer carMeas = new CarMeasurer();
Car[] cars = new Car[]
{
new Car(20000, 0.12),
new Car(30000, 0.16),
new Car(90000, 0.18),
};
double averagePrice = Data.average(cars, carMeas);
System.out.println("average price is: " + averagePrice);
}
}
五 运行
average area is: 625.0
average price is: 54466.666666666664
六 图解
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
以上是 Java的回调机制实例详解 的全部内容, 来源链接: utcz.com/z/336244.html