天天小说网

35.1 迷你版的交易系统

所示。

代码清单35-1 IC卡类

public class Card {

//IC卡号码

private String cardNo="";

//卡内的固定交易金额

private int steadyMoney =0;

//卡内自由交易金额

private int freeMoney =0;

//getter/setter方法

public String getCardNo() {

return cardNo;

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

public int getSteadyMoney() {

return steadyMoney;

public void setSteadyMoney(int steadyMoney) {

this.steadyMoney = steadyMoney;

public int getFreeMoney() {

return freeMoney;

public void setFreeMoney(int freeMoney) {

this.freeMoney = freeMoney;

细心的读者可能注意到,金额怎么都是整数类型呀,应该是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;

两个最简单也是在应用中最常使用的对象定义完毕,下面就需要来定义策略了,非常明显的策略模式,类图如图35-2所示。

典型的策略模式,扣款有两种策略:固定扣款和自由扣款。下面我们来看代码,先看抽象策略,也就是扣款接口,如代码清单35-3所示。

代码清单35-3 扣款策略接口

public interface IDeduction {

//扣款,提供交易和卡信息,进行扣款,并返回扣款是否成功

public boolean exec(Card card,Trade trade);

固定扣款的规则是固定金额和自由金额各扣除交易金额的一半,如代码清单35-4所示。

代码清单35-4 扣款策略一

public class SteadyDeduction implements IDeduction {

//固定性交易扣款

public boolean exec(Card card, Trade trade) {

//固定金额和自由金额各扣除50%int halfMoney = (int)Math.rint(trade.getAmount() / 2.0);

card.setFreeMoney(card.getFreeMoney() - halfMoney);

card.setSteadyMoney(card.getSteadyMoney() - halfMoney);

return true;

图35-2 扣款策略类图

这个具体策略也非常简单,就是两个金额各自减去交易额的一半(注意除数是2.0,可不是2),然后再四舍五入,算法确实简单。该逻辑没有考虑账户余额不足的情况,也没有考虑异常情况,比如并发情况,读者可以想想看,一张卡有两笔消费同时发生时,是不是就发生错误了?一张卡同时有两笔消费会出现这种情况吗?会的,网络阻塞的情况,MQ多通道发送,在网络繁忙的情况下是有可能出现该问题,这里就不多

更多内容加载中...请稍候...

若您看到此段落,代表章节内容加载失败,请关闭浏览器的阅读模式、畅读模式、小说模式,以及关闭广告屏蔽功能,或复制网址到其他浏览器阅读!

新书推荐

魔法使苍崎青子事件簿 红楼道爷 致郁系编剧 下海后,遇见魔女小姐 人在柯南,但是修罗场 诸天万古道 我在修仙界趋吉避凶 苟在美食的俘虏 从有风的地方开始的文娱 全民废土:我能无限强化避难所