Skip to content
← 返回设计模式列表
设计意图与对象责任

策略 ​

运行时替换同一任务的算法。

行为型

说明 ​

把变化的计算过程注入调用方,避免不断增长的条件分支。

分析 ​

Checkout 接收 Pricing 函数,不关心具体是折扣、会员价还是其他计算方式。运行时传入不同策略即可替换算法,测试时也能传入简单函数验证结算逻辑。

Checkout 固定调用入口,把变化的计算交给 Pricing。100 经 Discount 得到 90;替换策略不应改变金额单位或偷偷扣款。示例不检查 nil、负数和溢出,生产契约需单独处理。策略由调用方选择;状态模式则通常由当前状态和事件限制可选行为。

查看图表代码

适用前提与边界 ​

只有一种固定规则时,不必为策略额外设计接口层。 交互流程很短且稳定时,直接调用通常更容易理解。

示例输入与调用 ​

go
fmt.Println(Checkout(100, Discount))

运行输出 ​

text
90

完整 Go 示例 ​

go
package main

import "fmt"

type Pricing func(int) int

func Checkout(price int, policy Pricing) int {
	return policy(price)
}
func Discount(price int) int {
	return price * 9 / 10
}

func main() {
	fmt.Println(Checkout(100, Discount))
}

继续阅读