Java的回调机制下

一 代码

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

三 图解

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值