细心的读者可能注意到,你的金额怎么都是整数类型呀,这不对呀,应该是double类型或者BigDecimal类型呀。是,一般非银行的交易系统,比如超市的收银系统,系统内都是存放的int整数类型,在显示的时候才转换为货币类型。
交易信息Trade类,负责记录每一笔交易,它是由监听程序监听MQ队列而产生的,有两个属性:交易编号和交易金额,其中的交易编号对整个交易非常重要,18位字符(在银行的交易系统中,这里可不是字符串,一般是十进制数组或二进制数字,要考虑系统的性能,数字运算可比字符运算快得多),包括POS机编号、商户编号、校验码等等,我们这里暂时用不到,就不多做介绍,我们只要知道它是一个非常有用的编码就成。交易金额为整数类型,实际金额放大100倍即可。如代码清单35-2所示。
代码清单35-2 交易类
public class Trade {
//交易编号
private String tradeNo = "";
//交易金额
private int amount = 0;
//getter/setter方法
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String postNo) {
this.tradeNo = postNo;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}
//交易编号
private String tradeNo = "";
//交易金额
private int amount = 0;
//getter/setter方法
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String postNo) {
this.tradeNo = postNo;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}
两个最简单也是在应用中最常使用的对象定义完毕,我们就需要来定义我们的策略了,非常明显的策略模式,类图如图35-2所示。

图35-1 扣款策略类图