您的位置:首页 > 编程语言 > Java开发

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
支付成功


说明

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

若输入密码的时间超过一分钟则会提示支付超时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息