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