题目详情
利用面向对象的思想实现一套代码,要求一个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
支付成功
说明
若选择给定以外的支付方式则会被要求重新选择
若输入密码的时间超过一分钟则会提示支付超时