当前位置: 首页 > news >正文

【设计模式】14、strategy 策略模式

文章目录

  • 十四、strategy 策略模式
    • 14.1 map_app
      • 14.1.1 map_app_test.go
      • 14.1.2 map_app.go
      • 14.1.3 navigate_strategy.go

十四、strategy 策略模式

https://refactoringguru.cn/design-patterns/strategy

需求: client 知道很多不同的策略, 希望在运行时切换.

场景示例: 就像高德地图一样, 导航到某地, 用户可选择其一: 地铁, 自驾, 打车, 自行车 等.

实现方式: 定义策略接口, 上层组合该接口. client 在运行时切换 具体策略.

14.1 map_app

├── mapapp.go
├── mapapp_test.go
└── navigate_strategy.go

14.1.1 map_app_test.go

package _41map_appimport "testing"func TestMapApp(t *testing.T) {app := MapApp{}app.SetNavigateStrategy(&WalkNavigateStrategy{})app.Run()app.SetNavigateStrategy(&SubwayNavigateStrategy{})app.Run()app.SetNavigateStrategy(&TaxiNavigateStrategy{})app.Run()
}

14.1.2 map_app.go

package _41map_appimport "fmt"type MapApp struct {navigateStrategy NavigateStrategy
}func (app *MapApp) Run() {fmt.Println("打开导航地图APP")app.navigateStrategy.Navigate()fmt.Println("关闭导航地图APP")
}func (app *MapApp) SetNavigateStrategy(s NavigateStrategy) {app.navigateStrategy = s
}

14.1.3 navigate_strategy.go

package _41map_appimport "fmt"type NavigateStrategy interface {// Navigate 导航Navigate()
}type WalkNavigateStrategy struct {
}func (s *WalkNavigateStrategy) Navigate() {fmt.Println("步行导航开始")
}type SubwayNavigateStrategy struct {
}func (s *SubwayNavigateStrategy) Navigate() {fmt.Println("地铁导航开始")
}type TaxiNavigateStrategy struct {
}func (s *TaxiNavigateStrategy) Navigate() {fmt.Println("出租车导航开始")
}
http://www.lryc.cn/news/343809.html

相关文章:

  • C++类和对象(基础篇)
  • Oracle导入数据中文乱码问题处理,修改客户端字符编码跟数据库的一致
  • 【与 Apollo 共创生态:展望自动驾驶全新未来】
  • 【webrtc】MessageHandler 5: 基于线程的消息处理:以PeerConnection信令线程为例
  • 计算机网络 3.2网络体系结构
  • 连接HiveMQ代理器实现MQTT协议传输
  • springcloud报错:Failed to start bean‘webServerStartStop‘
  • el-checkbox 无法动态设置勾选状态
  • 车规级低功耗汽车用晶振SG-9101CGA
  • 企业是保留传统的MES还是换新的MES?
  • 2024年第六届世界软件工程研讨会(WSSE 2024)即将召开!
  • Linux网络编程:TCP编程实现
  • 小剧场短剧影视小程序源码_后端PHP
  • C语言总结三:数组(压缩版)
  • 我独自升级崛起怎么玩 我独自升级崛起游玩教程分享
  • 前端上传大文件
  • Kompas AI图片转换器:高效解决格式不兼容问题
  • 自动驾驶规划与控制技术解析
  • 计算机等级考试常见问题
  • C语言实战项目--贪吃蛇
  • 【LAMMPS学习】八、基础知识(5.3)Body particles体粒子
  • 【3D目标检测】常见相关指标说明
  • QT设计模式:工厂模式
  • 【电路笔记】-容抗
  • 基于若依框架搭建网站的开发日志(一):若依框架搭建、启动、部署
  • Android中Fragment失去焦点的场景
  • Linux变量的认识及环境变量配置详解
  • 【excel】数据非数值导致排序失效
  • 软件网关--Nginx
  • sourceTree push失败