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

图35-4 扣款子模块完整类图
蜘蛛网了?这还不是复杂的,真实系统比这复杂得多,幸好我们在之前已经分析过,还是比较容易看懂的。我们所有的开发都完成了,是不是应该写一个测试类来展示一下我们的成果,如代码清单35-10所示。
代码清单35-1 场景类
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("\n======交易凭证========");
System.out.println(trade.getTradeNo()+" 交易成功!");
System.out.println("本次发生的交易金额为:"+ trade.getAmount()/100.0 + " 元");
//展示一下卡内信息
showCard(card);
System.out.print("\n是否需要退出?(Y/N)");
if(getInput().equalsIgnoreCase("y")){
flag = false; //退出;
}
}
}
//初始化一个IC卡
private static Card initIC(){
Card card = new Card();
card.setCardNo("1100010001000");
card.setFreeMoney(100000); //一千元
card.setSteadyMoney(80000); //八百元
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.getSteadyMoney()/100.0 + " 元");
System.out.println("自由类型余额:"+ card.getFreeMoney()/100.0 + " 元");
}
//获得键盘输入
public static String getInput(){
String str ="";
try {
str = (new BufferedReader(new InputStreamReader(System.in))).readLine();
} catch (IOException e) {
//异常处理
}
return str;
}
}
//模拟交易
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("\n======交易凭证========");
System.out.println(trade.getTradeNo()+" 交易成功!");
System.out.println("本次发生的交易金额为:"+ trade.getAmount()/100.0 + " 元");
//展示一下卡内信息
showCard(card);
System.out.print("\n是否需要退出?(Y/N)");
if(getInput().equalsIgnoreCase("y")){
flag = false; //退出;
}
}
}
//初始化一个IC卡
private static Card initIC(){
Card card = new Card();
card.setCardNo("1100010001000");
card.setFreeMoney(100000); //一千元
card.setSteadyMoney(80000); //八百元
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.getSteadyMoney()/100.0 + " 元");
System.out.println("自由类型余额:"+ card.getFreeMoney()/100.0 + " 元");
}
//获得键盘输入
public static String getInput(){
String str ="";
try {
str = (new BufferedReader(new InputStreamReader(System.in))).readLine();
} catch (IOException e) {
//异常处理
}
return str;
}
}