二、大话设计模式 之 策略模式

模式特点:定义算法家族并且分别封装,它们之间可以相互替换而不影响客户端。

程序实例:商场收银软件,需要根据不同的销售策略方式进行收费

package main

import (
"fmt"
)

type cashSuper interface {
AcceptCash(float64) float64
}

type cashNormal struct {
}

func (normal *cashNormal) AcceptCash(money float64) float64 {
return money
}

type cashRebate struct {
moneyRebate float64
}

func (rebate *cashRebate) AcceptCash(money float64) float64 {
return money * rebate.moneyRebate
}

type cashReturn struct {
moneyCondition float64
moneyReturn float64
}

func (returned *cashReturn) AcceptCash(money float64) float64 {
if money >= returned.moneyCondition {
return money - float64(int(money/returned.moneyCondition))*returned.moneyReturn
} else {
return money
}
}

type CashContext struct {
cashSuper
}

func NewCashContext(str string) *CashContext {
cash := new(CashContext)
switch str {
case"正常收费":
cash.cashSuper = &cashNormal{}
case"满300返100":
cash.cashSuper = &cashReturn{300, 100}
case"打8折":
cash.cashSuper = &cashRebate{0.8}
}
return cash
}

func main() {
var total float64
context := NewCashContext("满300返100")
total += context.AcceptCash(1 * 10000)
context = NewCashContext("正常收费")
total += context.AcceptCash(1 * 10000)
context = NewCashContext("打8折")
total += context.AcceptCash(1 * 10000)
fmt.Println(total)
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值