GoLang职责链模式代码实现介绍.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

GoLang职责链模式代码实现介绍

目录1.需求2.代码实现1.manager.go2.skill1_manager.go3.skill2_manager.go4.skill3_manager.go5.mian.go总结

1.需求

实现一个工具能准确判断英雄能秒人的技能伤害!方便开挂时选择最优技能,直接秒人,有的英雄现如今只有三个技能,但也不排除之后重做会有四个技能,要求实现简单上手,易扩展!

技能2进来了

技能2满足条件释放造成9000伤害

技能3进来了

技能3满足条件释放造成10000伤害

2025/5/1010:26:31技能1,伤害7000有点低不太行啊!推荐你换其他技能

2025/5/1010:26:31技能1,伤害7000有点低不太行啊!推荐你换其他技能

职责:判断能秒人的伤害技能

链:技能链

Golang实现职责链模式时候,因为没有继承的支持,使用链对象包涵职责的方式,即:

链对象包含当前职责对象以及下一个职责链。职责对象提供接口表示是否能处理对应请求。职责对象提供处理函数处理相关职责。

2.代码实现

1.manager.go

下面是先定义一个职责链管理器,来帮助每个对象判断它是否符合职责

packagemain

importlog

//职责链模式

typeManagerinterface{

HaveKill(attackint)bool//是否击杀

HandleAttackRequest(skillIdint,attackint)bool//连招

//连招

typeSkillChainstruct{

Manager

successor*SkillChain

func(r*SkillChain)SetSuccessor(m*SkillChain){

r.successor=m

func(r*SkillChain)HandleAttackRequest(skillIdint,attackint)bool{

//伤害是否满足击杀

ifr.Manager.HaveKill(attack){

returnr.Manager.HandleAttackRequest(skillId,attack)//释放连招把并且播报

ifr.successor!=nil{

log.Printf(技能%d,伤害%d有点低不太行啊!推荐你换其他技能\n,skillId,attack)

returnr.successor.HandleAttackRequest(skillId,attack)

returnfalse

func(r*SkillChain)HaveKill(attackint)bool{

returntrue

}

2.skill1_manager.go

给英雄技能一对象实现对应的职责

packagemain

import(

fmt

const(

Hp=8000

SkillOne=1

SkillTwo=2

SkillThree=3

typeSkillOneManagerstruct{

funcNewSkillOneManager()*SkillChain{

returnSkillChain{

Manager:SkillOneManager{},

func(sSkillOneManager)HaveKill(attackint)bool{

returnattackHp

func(sSkillOneManager)HandleAttackRequest(skillIdint,attackint)bool{

fmt.Printf(技能%d进来了\n,skillId)

ifskillId==SkillOne{

fmt.Printf(技能%d满足条件释放造成%d伤害\n,skillId,attack)

returntrue

fmt.Printf(技能%d满足条件释放造成%d伤害\n,skillId,attack)

returnfalse

}

3.skill2_manager.go

packagemain

import(

fmt

typeSkillTwoManagers

文档评论(0)

152****2468 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档