Go语言中可用函数式编程实现策略模式,通过定义SortStrategy函数类型并结合一等函数,使排序算法可动态切换;具体通过Sorter结构体持有策略,支持运行时替换算法,如使用AscendingSort、DescendingSort或匿名函数作为策略,实现灵活、解耦的排序逻辑。

在Go语言中,策略模式通常用于将算法的实现与使用解耦,让不同算法可以相互替换而不影响客户端。传统的策略模式依赖接口和结构体,但Go支持一等函数(first-class functions),这使得我们可以用函数式的方式简洁地实现策略模式。
定义一个函数类型来表示策略,是函数式实现的核心。比如,我们想实现不同的排序策略:
type SortStrategy func([]int)
这个函数类型可以接收任何符合签名的函数,比如升序、降序排序:
立即学习“go语言免费学习笔记(深入)”;
func AscendingSort(data []int) {
sort.Ints(data)
}
func DescendingSort(data []int) {
sort.Sort(sort.Reverse(sort.IntSlice(data)))
}
定义一个上下文结构体,持有当前策略,并提供切换和执行能力:
type Sorter struct {
strategy SortStrategy
}
func (s *Sorter) SetStrategy(strategy SortStrategy) {
s.strategy = strategy
S-CMS政府建站系统是淄博闪灵网络科技有限公司开发的一款专门为企业建站提供解决方案的产品,前端模板样式主打HTML5模板,以动画效果好、页面流畅、响应式布局为特色,程序主体采用ASP+ACCESS/MSSQL构架,拥有独立自主开发的一整套函数、标签系统,具有极强的可扩展性,设计师可以非常简单的开发出漂亮实用的模板。系统自2015年发布第一个版本以来,至今已积累上万用户群,为上万企业提供最优质的建
258
}
func (s *Sorter) Sort(data []int) {
if s.strategy != nil {
s.strategy(data)
}
}
使用时可以动态切换策略:
sorter := &Sorter{}
data := []int{3, 1, 4, 1, 5}
sorter.SetStrategy(AscendingSort)
sorter.Sort(data) // [1 1 3 4 5]
sorter.SetStrategy(DescendingSort)
sorter.Sort(data) // [5 4 3 1 1]
函数式风格的优势在于可以使用匿名函数快速定义临时策略,无需提前声明:
sorter.SetStrategy(func(data []int) {
for i, j := 0, len(data)-1; i
data[i], data[j] = data[j], data[i]
}
})
这适用于一次性或场景特定的逻辑,比如反转数组,无需额外命名函数。
这种函数式策略模式变体在Go中更轻量:
比如在配置化处理、事件处理器、校验规则等场景中非常实用。
基本上就这些。Go的函数式特性让策略模式变得更直接,去掉冗余结构,突出行为可替换的本质。不复杂但容易忽略。
以上就是Golang策略模式变体 函数式实现方式的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号