Go 设计模式-策略模式

简介: Go 设计模式-策略模式

设计模式

image.png

策略模式


策略模式定义一组算法类,将每个算法分别封装起来,让他们可以相互替换,策略模式可以使得算法独立于客户端,策略模式用来解耦策略的定义,创建,使用。一般来说策略模式也是包含 定义,创建,和使用 三个部分。

策略模式和工厂模式有点类似,只是多了策略这一部分,

运用场景


  • 策略模式最常用的场景是,利用它来避免冗长的if-else 或者 switch 分支判断
  • 它的作用不止如此,可以跟模板模式一样,提供框架的扩展点。
  • 策略模式的主要作用是解耦策略的定义,创建,使用,控制代码的复杂度

代码


package strategy
import "fmt"
type Payment struct {
 context  *PaymentContext
 strategy PaymentStrategy
}
type PaymentContext struct {
 Name, CardID string
 Money        int
}
func NewPayment(name, cardid string, money int, strategy PaymentStrategy) *Payment {
 return &Payment{
  context: &PaymentContext{
   Name:   name,
   CardID: cardid,
   Money:  money,
  },
  strategy: strategy,
 }
}
func (p *Payment) Pay() {
 p.strategy.Pay(p.context)
}
type PaymentStrategy interface {
 Pay(*PaymentContext)
}
type Cash struct{}
func (*Cash) Pay(ctx *PaymentContext) {
 fmt.Printf("Pay $%d to %s by cash", ctx.Money, ctx.Name)
}
type Bank struct{}
func (*Bank) Pay(ctx *PaymentContext) {
 fmt.Printf("Pay $%d to %s by bank account %s", ctx.Money, ctx.Name, ctx.CardID)
}


测试


package strategy
func ExamplePayByCash() {
 payment := NewPayment("Ada", "", 123, &Cash{})
 payment.Pay()
 // Output:
 // Pay $123 to Ada by cash
}
func ExamplePayByBank() {
 payment := NewPayment("Bob", "0002", 888, &Bank{})
 payment.Pay()
 // Output:
 // Pay $888 to Bob by bank account 0002
}
相关文章
|
2月前
|
设计模式 算法 Kotlin
Kotlin - 改良设计模式 - 策略模式
Kotlin - 改良设计模式 - 策略模式
57 4
|
4月前
|
设计模式 算法 测试技术
PHP中的设计模式:策略模式的应用与实践
在软件开发的浩瀚海洋中,设计模式如同灯塔,指引着开发者们避开重复造轮子的暗礁,驶向高效、可维护的代码彼岸。今天,我们将聚焦于PHP领域中的一种重要设计模式——策略模式,探讨其原理、应用及最佳实践,揭示如何通过策略模式赋予PHP应用灵活多变的业务逻辑处理能力,让代码之美在策略的变换中熠熠生辉。
|
21天前
|
设计模式 存储 缓存
前端必须掌握的设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,旨在将多分支复杂逻辑解耦。每个分支类只关心自身实现,无需处理策略切换。它避免了大量if-else或switch-case代码,符合开闭原则。常见应用场景包括表单验证、风格切换和缓存调度等。通过定义接口和上下文类,策略模式实现了灵活的逻辑分离与扩展。例如,在国际化需求中,可根据语言切换不同的词条包,使代码更加简洁优雅。总结来说,策略模式简化了多条件判断,提升了代码的可维护性和扩展性。
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
54 1
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
48 2
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
54 2
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
50 3
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
40 2
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
73 3
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
34 3