题目详情

利用面向对象的思想实现一套代码,要求一个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
支付成功




说明

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

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