Java语言中的函数编程 - 编程入门网
mmons.functor.*;
import org.apache.commons.functor.core.composite.*;
import org.apache.commons.functor.adapter.*;
import org.apache.commons.functor.UnaryFunction;
import org.apache.commons.functor.core.Constant;
import org.apache.commons.functor.core.comparator.Min;
public class TestC
{
public static void main(String[] args)
{
double discountRate = 0.1;
double taxRate=0.33;
double maxDiscount = 30;
SETLItem item = new SETLItem();
item.setPrice(350);
UnaryFunction calcDiscount =
new RightBoundFunction(new Multiply(), new Double(discountRate));
Constant cap = new Constant(new Double(maxDiscount));
BinaryFunction calcActualDiscount =
new UnaryCompositeBinaryFunction (new Min(), calcDiscount, cap);
BinaryFunctionUnaryFunction calcActualDiscountAsUnary =
new BinaryFunctionUnaryFunction(calcActualDiscount);
BinaryFunction calcDiscountedPrice =
new UnaryCompositeBinaryFunction (new Subtract(), new Identity(), calcActualDiscountAsUnary);
BinaryFunctionUnaryFunction calcDiscountedPriceAsUnary =
new BinaryFunctionUnaryFunction(calcDiscountedPrice);
UnaryFunction calcTax =
new RightBoundFunction(new Multiply(), new Double(1+taxRate));
CompositeUnaryFunction calcNetPrice =
new CompositeUnaryFunction(calcTax, calcDiscountedPriceAsUnary);
Double netPrice = (Double)calcNetPrice.evaluate(new Double(item.getPrice()));
System.out.println("The net price is: " + netPrice);
}
}
Java语言中的函数编程(6)时间:2011-01-31 IBM Abhijit Belapurkar通过首先观察所使用的 Apache Functor 库中的三个标准仿函数,开始分析和理解这段代码。 UnaryCompositeBinaryFunction 仿函数取一个二元函数和两个一元函数作为输入。首先计算后两个函数,它们的输出作为输入传递给二元函数。在清单 4 中对二元合成使用这个仿函数两次。 Constant 仿函数的计算总是返回一个常量值(即在其构造时输入的值),不管以后任何计算消息中传递给它的参数是什么值。在清单 4 中,变量 cap 的类型为 Constant 并总是返回最大折扣数量。 Identity 仿函数只是返回作为 evaluate 消息的输入参数传递给它的这个对象作为输出。清单 4 显示 Identity 仿函数的一个实例,该仿函数是在创建 calcDiscountedPrice 时作为一个一元仿函数创建和传递的。同时在清单 4 中, evaluate 消息包含标签价格作为其参数,这样 Identity 仿函数就返回标签价格作为输出。 第一个二元合成在用计算 calcDiscount (通过对标签价格直接应用折扣率)和 cap 的 UnaryCompositeBinaryFunction 设置变量 calcActualDiscount 时是可见的。这两个一元仿函数计算的输出传递给称为 Min 的内置二元仿函数,它比较这两者并返回其中最小的值。 这个例子显示了定制类 BinaryFunctionUnaryFunction 。这个类适配一个二元仿函数,使它像一元仿函数的接口。就是说,当这个类接收一个带有一个参数的 evaluate 消息时,它在内部发送 (向其封装的二元函数)一个 evaluate 消息,它的两个参数是作为输入接收的同一个对象。因为 calcActualDiscount 是二元函数,所以通过类型为 BinaryFunctionUnaryFunction 的 calcActualDiscountAsUnary 实例将它包装到一个一元仿函数接口中。很快就可以看到包装 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |