天天小说网

35.1 迷你版的交易系统

getDeduction(reg);

//产生一个策略上下文

DeductionContext context = new DeductionContext(deduction);

//进行扣款处理

context.exec(card, trade);

//返回扣款处理完毕后的数据

return card;

//获得对应的商户消费策略

private static StrategyMan getDeductionType(Trade trade) {

//模拟操作

if(trade.getTradeNo().contains("abc")) {

return StrategyMan.FreeDeduction;

}else {

return StrategyMan.SteadyDeduction;

这次为什么要先展示代码而后写类图呢?那是因为这段代码比写类图更能让你理解。读者注意一下getDeductionType方法,这个方法在实际项目中是存在的,但是与上面的写法有天壤之别,因为在实际项目中,数据库中保存了策略代码与交易编码的对应关系,直接通过数据库的SQL语句就可以返回对应的扣款策略。这里我们采用大家最熟悉的条件转移来实现,也是比较清晰和容易理解的。

可能读者要问了,在门面模式中已经明确地说明,门面类中不允许有业务逻辑存在,但是你这里还是有了一个getDeductionType方法,它可代表的是一个判断逻辑呀,这是为什么呢?是的,该方法完全可以移到其他Hepler类中,由于我们是示例代码,暂没有明确的业务含义,故编写在此处,读者在实际应用中,请把该方法放置到其他类中。

好,所有用到的模式都介绍完毕了,我们把完整的类图整理一下,如图35-4所示。

图35-4 扣款子模块完整类图

真实系统比这复杂得多,有了我们之前的分析,这个图还是比较容易看懂的。我们所有的开发都完成了,是不是应该写一个测试类来展示一下我们的成果,如代码清单35-10所示。

代码清单35-10 场景类

public class Client {

//模拟交易

public static void main(String[] args) {

//初始化一张IC卡

Card card = initIC();

//显示一下卡内信息

System.out.println("========初始卡信息:=========");

showCard(card);

//是否停止运行标志

boolean flag = true;

while(flag) {

Trade trade = createTrade();

DeductionFacade.deduct(card, trade);

//交易成功,打印出成功处理消息System.out.println("

======交易凭证========");

System.out.println(trade.getTradeNo()+" 交易成功!");

System.out.println("本次发生的交易金额为:"+trade.getAmount()/100.0+"元");

//展示一下卡内信息

showCard(card);

System.out.print("

是否需要退出?(Y/N)");

if(getInput().equalsIgnoreCase("y")) {

flag = false;

//退出

//初始化一个IC卡

private static Card initIC() {

Card card = new Card();

card.setCardNo("1100010001000");

card.setFreeMoney(100000);

//1000元card.setSteadyMoney(80000);

//800元

return card;

//产生一条交易

private static Trade createTrade() {

Trade trade = new Trade();

System.out.print("请输入交易编号:");

trade.setTradeNo(getInput());

System.out.print("请输入交易金额:");

trade.setAmount(Integer.parseInt(getInput()));

//返回交易

return trade;

//打印出当前卡内交易余额

public static void showCard(Card card) {

System.out.println("IC卡编号:" + card.getCardNo());

System.out.println("固定类型余额:"+ card.ge

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

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

新书推荐

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