面试题答案
一键面试实现思路
- 定义支付接口:包含支付相关的方法,如支付操作。
- 订单处理模块依赖支付接口:订单处理逻辑通过该接口调用支付功能,而不依赖具体的支付实现。
- 实现具体支付方式:每种支付方式都实现支付接口,这样当支付方式变更时,只需修改或新增具体支付实现,订单处理逻辑不受影响。
代码示例
package main
import (
"fmt"
)
// 支付接口
type Payment interface {
Pay(amount float64) bool
}
// 支付宝支付实现
type Alipay struct{}
func (a Alipay) Pay(amount float64) bool {
fmt.Printf("使用支付宝支付 %.2f 元\n", amount)
return true
}
// 微信支付实现
type WechatPay struct{}
func (w WechatPay) Pay(amount float64) bool {
fmt.Printf("使用微信支付 %.2f 元\n", amount)
return true
}
// 订单处理模块
type Order struct {
payment Payment
amount float64
}
func NewOrder(payment Payment, amount float64) *Order {
return &Order{
payment: payment,
amount: amount,
}
}
func (o *Order) Process() {
if o.payment.Pay(o.amount) {
fmt.Println("订单支付成功")
} else {
fmt.Println("订单支付失败")
}
}
可以这样调用:
func main() {
// 使用支付宝支付订单
alipayOrder := NewOrder(Alipay{}, 100.0)
alipayOrder.Process()
// 使用微信支付订单
wechatPayOrder := NewOrder(WechatPay{}, 200.0)
wechatPayOrder.Process()
}
在上述代码中,Order
结构体只依赖 Payment
接口,而不是具体的支付实现。当需要新增或变更支付方式时,如添加银行卡支付,只需实现 Payment
接口,而 Order
的 Process
方法无需修改,从而实现了订单处理和支付模块的解耦。