mirror of
https://github.com/Estom/notes.git
synced 2026-02-06 12:04:05 +08:00
57 lines
967 B
Go
57 lines
967 B
Go
/**
|
|
* @Author:zhoutao
|
|
* @Date:2020/12/12 下午1:50
|
|
* @Desc:
|
|
*/
|
|
|
|
package strategy
|
|
|
|
import "fmt"
|
|
|
|
//策略模式:定义一系列算法,让这些算法在运行时可以互换,使得算法分离,符合开闭原则
|
|
|
|
type PaymentContext struct {
|
|
Name, CardID string
|
|
Money int
|
|
}
|
|
|
|
func NewPayment(name, cardID string, money int, strategy PaymentStrategy) *Payment {
|
|
return &Payment{
|
|
context: &PaymentContext{
|
|
Name: name,
|
|
CardID: cardID,
|
|
Money: money,
|
|
},
|
|
strategy: strategy,
|
|
}
|
|
}
|
|
|
|
type Payment struct {
|
|
context *PaymentContext
|
|
strategy PaymentStrategy
|
|
}
|
|
|
|
func (p *Payment) Pay() {
|
|
p.strategy.Pay(p.context)
|
|
}
|
|
|
|
type PaymentStrategy interface {
|
|
Pay(*PaymentContext)
|
|
}
|
|
|
|
//by cash
|
|
type Cash struct {
|
|
}
|
|
|
|
func (*Cash) Pay(ctx *PaymentContext) {
|
|
fmt.Printf("Pay $%d to %s by cash", ctx.Money, ctx.Name)
|
|
}
|
|
|
|
//by Bank
|
|
type Bank struct {
|
|
}
|
|
|
|
func (*Bank) Pay(ctx *PaymentContext) {
|
|
fmt.Printf("Pay $%d to %s by Bank", ctx.Money, ctx.Name)
|
|
}
|