首页 > 后端开发 > Golang > 正文

Golang策略模式算法动态切换示例

P粉602998670
发布: 2025-10-10 12:37:01
原创
620人浏览过
策略模式通过接口封装算法,使算法可互换。定义SortStrategy接口,实现BubbleSort和QuickSort结构体,由Sorter上下文动态切换策略,客户端无需修改代码即可运行不同排序算法,提升扩展性与维护性。

golang策略模式算法动态切换示例

在Go语言中,策略模式是一种行为设计模式,它允许你定义一系列算法,并将每种算法封装起来,使它们可以互换使用。这种模式让算法的变化独立于使用它的客户端。下面通过一个实际例子展示如何用Golang实现策略模式,动态切换不同的算法。

定义策略接口

首先,我们定义一个统一的策略接口,所有具体的算法都实现这个接口。

注意: 接口抽象了行为,使得调用方无需关心具体实现。

比如我们要实现不同方式的排序算法

type SortStrategy interface {<br>    Sort([]int) []int<br>}
登录后复制

立即学习go语言免费学习笔记(深入)”;

实现具体策略

接下来,实现几种具体的排序算法,如冒泡排序和快速排序:

type BubbleSort struct{}

func (b *BubbleSort) Sort(data []int) []int {<br>    n := len(data)<br>    result := make([]int, n)<br>    copy(result, data)<br>    for i := 0; i < n-1; i++ {<br>        for j := 0; j < n-i-1; j++ {<br>            if result[j] > result[j+1] {<br>                result[j], result[j+1] = result[j+1], result[j]<br>            }<br>        }<br>    }<br>    return result<br>}
登录后复制

type QuickSort struct{}

func (q *QuickSort) Sort(data []int) []int {<br>    result := make([]int, len(data))<br>    copy(result, data)<br>    quickSortHelper(result, 0, len(result)-1)<br>    return result<br>}
登录后复制

func quickSortHelper(arr []int, low, high int) {<br>    if low < high {<br>        pi := partition(arr, low, high)<br>        quickSortHelper(arr, low, pi-1)<br>        quickSortHelper(arr, pi+1, high)<br>    }<br>}
登录后复制

func partition(arr []int, low, high int) int {<br>    pivot := arr[high]<br>    i := low - 1<br>    for j := low; j < high; j++ {<br>        if arr[j] < pivot {<br>            i++<br>            arr[i], arr[j] = arr[j], arr[i]<br>        }<br>    }<br>    arr[i+1], arr[high] = arr[high], arr[i+1]<br>    return i + 1<br>}
登录后复制

算家云
算家云

高效、便捷的人工智能算力服务平台

算家云 37
查看详情 算家云

上下文管理策略切换

创建一个上下文结构体来持有当前策略,并提供方法动态更换策略:

type Sorter struct {<br>    strategy SortStrategy<br>}
登录后复制

func (s *Sorter) SetStrategy(strategy SortStrategy) {<br>    s.strategy = strategy<br>}
登录后复制

func (s *Sorter) Sort(data []int) []int {<br>    return s.strategy.Sort(data)<br>}
登录后复制

使用示例

在main函数中演示如何动态切换算法:

func main() {<br>    sorter := &Sorter{}<br><br>    data := []int{64, 34, 25, 12, 22, 11, 90}<br><br>    // 使用冒泡排序<br>    sorter.SetStrategy(&BubbleSort{})<br>    result1 := sorter.Sort(data)<br>    fmt.Println("冒泡排序结果:", result1)<br><br>    // 切换为快速排序<br>    sorter.SetStrategy(&QuickSort{})<br>    result2 := sorter.Sort(data)<br>    fmt.Println("快速排序结果:", result2)<br>}
登录后复制

输出:
冒泡排序结果: [11 12 22 25 34 64 90]
快速排序结果: [11 12 22 25 34 64 90]

基本上就这些。通过策略模式,我们可以轻松替换算法而不需要修改调用代码,提升了程序的扩展性和可维护性。不复杂但容易忽略的是接口抽象和运行时切换的能力。

以上就是Golang策略模式算法动态切换示例的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号