java练习(16.08.03)支付问题
2016-08-03 20:41
477 查看
题目详情
利用面向对象的思想实现一套代码,要求一个APP支持微信支付,支付宝支付,银联支付,以后甚至更多的支付方式。支付通常包含鉴权(authorization)、支付订单生成(generateBill)、最后确认支付(pay)过程。实现代码
主要思路:设计一个Paymet接口,不同的支付方式分别设计不同的实现类Payment接口:移动支付的接口
package fgb; //移动支付接口 public interface Payment { //登录授权 public void authorization(); //订单生成 public void generateBill(); //确认支付 public void pay(); Account account=new Account("1234", "pass@word"); }Account是内部类,这里已经预设了已经绑定好的账号
Payment接口的三个实现类如下
Alipay类:实现支付宝支付的类
package fgb; import java.util.Scanner; //支付宝支付 public class Alipay implements Payment{ @Override public void authorization() { System.out.println("跳转到支付宝页面并授权登陆"); } @Override public void generateBill() { System.out.println("在支付宝页面中生成订单"); } @Override public void pay() { System.out.println("请输入密码确认支付宝支付"); long startTime=System.currentTimeMillis(); Scanner scanner=new Scanner(System.in); String pw=scanner.nextLine(); long endTime=System.currentTimeMillis(); if(endTime-startTime>60000){ System.out.println("支付超时"); }else if(Payment.account.config(pw)){ System.out.println("支付成功"); }else{ System.out.println("密码输入错误"); } } }
WeChatPay类:微信支付的实现类
package fgb; import java.util.Scanner; //微信支付 public class WeChatPay implements Payment{ @Override public void authorization() { System.out.println("跳转至微信支付页面并进行授权登陆"); } @Override public void generateBill() { System.out.println("在微信页面上生成订单"); } @Override public void pay() { System.out.println("请输入密码确认微信支付"); long startTime=System.currentTimeMillis(); Scanner scanner=new Scanner(System.in); String pw=scanner.next(); long endTime=System.currentTimeMillis(); if(endTime-startTime>60000){ System.out.println("支付超时"); }else if(Payment.account.config(pw)){ System.out.println("支付成功"); }else{ System.out.println("密码输入错误"); } } }
UnionPay类:银联支付的实现类
package fgb; import java.util.Scanner; //银联支付 public class UnionPay implements Payment{ @Override public void authorization() { System.out.println("跳转至银联支付页面并授权登陆"); } @Override public void generateBill() { System.out.println("在银联支付页面上生成订单"); } @Override public void pay() { System.out.println("请输入密码确认银联支付"); long startTime=System.currentTimeMillis(); Scanner scanner=new Scanner(System.in); String pw=scanner.next(); long endTime=System.currentTimeMillis(); if(endTime-startTime>60000){ System.out.println("支付超时"); }else if(Payment.account.config(pw)){ System.out.println("支付成功"); }else{ System.out.println("密码输入错误"); } } }
PaymentFactory类:用于创建Payment接口实现类的类
package fgb; import java.util.Scanner; public class PaymentFactory { public static Payment paymentSwitcher(){ System.out.println("请选择支付方式"); System.out.println("1.微信支付\t2.支付宝支付\t3.银联支付"); Scanner scanner=new Scanner(System.in); int flag=scanner.nextInt(); switch (flag) { case 1: return (new WeChatPay()); case 2: return (new Alipay()); case 3: return (new UnionPay()); default: System.out.println("貌似不支持这种支付方式呢,请重新选择"); return paymentSwitcher(); } } }
Account类:支付所用到的银行账号
package fgb; public final class Account { private String username; private String password; public Account(String name, String password) { this.username = name; this.password = password; } <span style="white-space:pre"> </span>//验证密码是否输入正确 public boolean config(String pw) { if (this.password.equals(pw)) { return true; } else { return false; } } }
最后是测试Test类
package fgb; public class Test { public static void main(String[] args) { Payment payment=PaymentFactory.paymentSwitcher(); payment.authorization(); payment.generateBill(); payment.pay(); } }
运行结果如下: 请选择支付方式 1.微信支付 2.支付宝支付 3.银联支付 2 跳转到支付宝页面并授权登陆 在支付宝页面中生成订单 请输入密码确认支付宝支付 pass@word 支付成功
说明
若选择给定以外的支付方式则会被要求重新选择若输入密码的时间超过一分钟则会提示支付超时
相关文章推荐
- java练习(16.08.03)龟兔赛跑问题
- Java程序练习-约瑟夫环问题
- java例程练习(有趣的函数重载问题)
- 线程问题 之 支付时支付界面未弹出问题(C++调用Java)
- 在Java程序练习时发现的一个数值上的问题
- Java基本功练习七(一维数组强化[豆机问题、八皇后问题])
- Java程序练习-饮食问题
- unity调用Android通过编译 java jar包出现问题解决和简单支付流程
- java练习--货船问题
- 《多线程的练习—排序问题——Java第十四周》
- java学习练习(每个程序员1小时内必须解决的5个编程问题)
- java例程练习(String类对象相等问题)
- java例程练习(多线程[线程同步问题])
- java例程练习(多线程[线程同步问题])
- 黑马程序员-Java if语句练习-暴露的基础小问题
- Java程序练习-约瑟夫环问题
- java例程练习(多线程[线程同步问题])
- java例程练习(多线程[死锁问题])
- 黑马程序员——JAVA基础--- 集合IO综合练习排序问题
- java练习——Integer对象问题