策略
运行时替换同一任务的算法。
行为型
说明
把变化的计算过程注入调用方,避免不断增长的条件分支。
分析
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))
}继续阅读
- 设计意图与对象责任
- 设计意图与对象责任
- 设计意图与对象责任