策略模式(Go)

本文介绍了策略模式在Go语言中的应用,通过一个王子选择不同武器攻击的例子,展示了传统实现方式存在的扩展性问题。通过引入策略模式,将攻击行为抽象为接口,实现了代码的开闭原则,提高了可维护性和扩展性。总结了策略模式的主要作用是替换并统一调用方法,以接口的形式降低耦合度。
摘要由CSDN通过智能技术生成

策略模式——定义算法族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化独立于使用算法的客户。

 

现在看一个例子:

现在有一个王子,要让他有攻击的技能,王子可以选择剑、斧头、枪等武器进行攻击。

在不适用策略模式的情况下我会这么写:

type prince struct {
	name string
}

func (pr *prince)attachWithSword() {
	fmt.Println("attach with a sword")
}

func (pr *prince)attachWithAxe() {
	fmt.Println("attach with a axe")
}

func main() {
	me := prince{"大狮"}
	me.attachWithSword()
	me.attachWithAxe()
}

代码非常简单,但是这样的代码扩展性非常差。比如我们如果要加上长枪的攻击效果则要继续给prince结构体增加方法,在具体调用的地方也要加上新的调用方式。

上面的方法实际上违反了设计原则中的开闭原则。一个软件应该对扩展开放,对修改关闭。即软件实体应该尽量在不修改原有代码的情况下进行扩展。(这个例子在go中体会不深,因为go没有类的概念,方法都是在结构体外增加的)

使用策略模式后
 

package main
 
import "fmt"
 
type weapone interface{
	attack()
}
 
type prince struct {
	name string
	wp weapone
}
 
func (pr *
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值