java练习(16.08.03)支付问题

来源:互联网 发布:java创建动态数组赋值 编辑:程序博客网 时间:2024/06/04 23:30

题目详情

利用面向对象的思想实现一套代码,要求一个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{@Overridepublic void authorization() {System.out.println("跳转到支付宝页面并授权登陆");}@Overridepublic void generateBill() {System.out.println("在支付宝页面中生成订单");}@Overridepublic 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{@Overridepublic void authorization() {System.out.println("跳转至微信支付页面并进行授权登陆");}@Overridepublic void generateBill() {System.out.println("在微信页面上生成订单");}@Overridepublic 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{@Overridepublic void authorization() {System.out.println("跳转至银联支付页面并授权登陆");}@Overridepublic void generateBill() {System.out.println("在银联支付页面上生成订单");}@Overridepublic 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支付成功

说明

若选择给定以外的支付方式则会被要求重新选择

若输入密码的时间超过一分钟则会提示支付超时


0 0
原创粉丝点击