SETLItem item1 = new SETLItem();
item1.setPrice(100);
SETLItem item2 = new SETLItem();
item2.setPrice(99);
if (bp.test(item1, item2))
System.out.println("Item1 costs more than Item2!");
else
System.out.println("Item2 costs more than Item1!");
SETLItem item3 = new SETLItem();
item3.setPrice(101);
if (bp.test(item1, item3))
System.out.println("Item1 costs more than Item3!");
else
System.out.println("Item3 costs more than Item1!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
BinaryPredicate 接口以由 Apache Functor 库提供的 IsGreaterThanOrEqual 类的形式特化。 PriceComparator 类实现了 java.util.Comparator 接口,并被作为输入传递给 IsGreaterThanOrEqual 类。收到一个 test 消息时, IsGreaterThanOrEqual 类自动调用 PriceComparator 类的 compare 方法。 compare 方法预期接收两个 SETLItem 对象,相应地它返回两个商品的价格差。 compare 方法返回的正值表明 item1 的成本不低于 item2 。
初看之下,对一个相当基本的操作要做很多的工作,那它有什么好处呢?特化 BinaryPredicate 接口(而不是编写 Java 比较表达式) 使您无论在何时何地都可以比较任意两个商品的价格。可以将 bp 对象作为数据传递并向它发送消息,以在任何时候、使用这两个参数的任何值来执行它(称为 test )。