用23种设计模式打造一个cocos creator的游戏框架----(十八)责任链模式
1、模式标准
模式名称:责任链模式
模式分类:行为型
模式意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
结构图:

适用于:
1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2、想在不明确指定接收者的情况下向多个对象中的一个提交一个请求。
3、可处理一个请求的对象集合应被动态指定
2、分析与设计
前面我们了解了命令模式,命令是谁发出的呢,这里引出的责任链模式,巧好可以用上。将一次请技能释放求通过一串责任(命令)链接起来,不同责任(命令)做出不同的技能释放命令。我们假设场上有5个敌对单位时,ai单位释放小技能;有小于10个大于5个敌对单位时,ai单位释放中技能,有10个以上敌对单位时,ai单位释放大技能。
意图:使多个对象(命令)都有机会处理(技能释放)请求,从而避免(技能释放)请求的发送者和接收者之间的耦合关系。将这些对象(命令)连成一条链,并沿着这条链传递该(技能释放)请求,直到有一个对象(命令)处理它为止。
3、开始打造

技能触发基类
export interface ITrigger {nextTrigger: ITriggercommand: ICommandsetNextTrigger(trigger: ITrigger): voidentryTrigger(param: any): voidcanTrigger(param: any): boolean
}export abstract class SkillTrigger implements ITrigger {nextTrigger: ITriggercommand: ICommandsetNextTrigger(trigger: ITrigger): void {this.nextTrigger = trigger;}setCommand(command: ICommand): void {this.command = command;}entryTrigger(skillTriggerRequest: ISkillTriggerRequest): void {console.log('entryTrigger', skillTriggerRequest, this)if (this.canTrigger(skillTriggerRequest)) {if (this.command) {this.command.execute();}} else if (this.nextTrigger) {this.nextTrigger.entryTrigger(skillTriggerRequest);} else {console.log("无其他触发器");}}abstract canTrigger(skillTriggerRequest: ISkillTriggerRequest): boolean;
}
小技能,中技能,大技能
// 小技能触发器
export class SmallSkillTrigger extends SkillTrigger {canTrigger(skillTriggerRequest: ISkillTriggerRequest): boolean {return skillTriggerRequest.enemyCount < 5; // 敌对单位数量小于5时释放小技能}
}// 中技能触发器
export class MediumSkillTrigger extends SkillTrigger {canTrigger(skillTriggerRequest: ISkillTriggerRequest): boolean {return skillTriggerRequest.enemyCount >= 5 && skillTriggerRequest.enemyCount < 10; // 敌对单位数量在5到10之间时释放中技能}
}// 大技能触发器
export class LargeSkillTrigger extends SkillTrigger {canTrigger(skillTriggerRequest: ISkillTriggerRequest): boolean {return skillTriggerRequest.enemyCount >= 10; // 敌对单位数量大于等于10时释放大技能}
}
技能命令
// 具体技能命令类 - 小技能
export class SmallSkillCommand implements ICommand {execute(): void {console.log("释放小技能");}
}// 具体技能命令类 - 中技能
export class MediumSkillCommand implements ICommand {execute(): void {console.log("释放中技能");}
}// 具体技能命令类 - 大技能
export class LargeSkillCommand implements ICommand {execute(): void {console.log("释放大技能");}
}
4、开始使用
// 创建责任链
const smallSkillTrigger = new SmallSkillTrigger();
const mediumSkillTrigger = new MediumSkillTrigger();
const largeSkillTrigger = new LargeSkillTrigger();// 创建命令
const smallSkillCommand = new SmallSkillCommand();
const mediumSkillCommand = new MediumSkillCommand();
const largeSkillCommand = new LargeSkillCommand();// 设置触发器的命令
smallSkillTrigger.setCommand(smallSkillCommand);
mediumSkillTrigger.setCommand(mediumSkillCommand);
largeSkillTrigger.setCommand(largeSkillCommand);smallSkillTrigger.setNextTrigger(mediumSkillTrigger);
mediumSkillTrigger.setNextTrigger(largeSkillTrigger);let param = {enemyCount: 8
}
smallSkillTrigger.entryTrigger(param);
// 输出
// 释放中技能
相关文章:
用23种设计模式打造一个cocos creator的游戏框架----(十八)责任链模式
1、模式标准 模式名称:责任链模式 模式分类:行为型 模式意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处…...
100天精通风控建模(原理+Python实现)——第9天:风控建模中为什么需要特征工程?
风控模型已在各大银行和公司都实际运用于业务,用于营销和风险控制等。本文以视频的形式阐述风控建模中为什么需要特征工程。并提供风控建模原理和Python实现文章清单。 之前已经阐述了100天精通风控建模(原理+Python实现)——第1天:什么是风控建模? 100天精通风控…...
【PHP】计算某个特定时间戳距离现在的天数
在PHP中,你可以使用time()函数获取当前时间的时间戳,然后将它与你想要计算的过去或未来的时间戳进行比较。为了得到相差的天数,你需要先用两个时间戳相减得到秒数差,然后再除以一天的总秒数(通常是86400秒)…...
lv12 uboot移植深化 9
u-boot-2013.01移植 【实验目的】 了解u-boot 的代码结构及移植的基本方法 【实验环境】 ubuntu 14.04发行版FS4412实验平台交叉编译工具arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行 【实验步骤】 1 建立自己的平台 1.…...
大数据与深度挖掘:如何在数字营销中与研究互动
数字营销最吸引人的部分之一是对数据的内在关注。 如果一种策略往往有积极的数据,那么它就更容易采用。同样,如果一种策略尚未得到证实,则很难获得支持进行测试。 数字营销人员建立数据信心的主要方式是通过研究。这些研究通常分为两类&…...
xtu oj 1327 字符矩阵
按照示例的规律输出字符矩阵。 比如输入字母D时,输出字符矩阵如下 ABCDCBA BBCDCBB CCCDCCC DDDDDDD CCCDCCC BBCDCBB ABCDCBA字符矩阵行首、尾都无空格。 输入 每行一个大写英文字母,如果字符为#,表示输入结束,不需要处理。 …...
讨论用于评估DREX的五种DR指标
概要 动态范围是已经使用了近一个世纪的用于评估接收机性能的参数。这里介绍五种动态有关指标的定义及测试方法,用于评估数字接收激励器(DREX,digital receiver exciters)。DREX是构成雷达的关键整部件,其瞬时带宽&am…...
基于SpringBoot的在线疫苗预防小程序
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的在线疫苗预防小程序,ja…...
Kafka使用总结
1、Kafka是何如做到高性能的? a、消息批处理减少网络通信开销,提升系统吞吐能力(先攒一波,消息以“批”为单位进行处理) 生产端:无论是同步发送还是异步发送,Kafka都不会立即就把这条消息发送出…...
2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题
2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题 目录 任务 1 网络平台搭建(50 分) 任务 2 网络安全设备配置与防护(250 分) 模块二 网络安全事件响应、数字取证调查、应用程序安…...
Apache Web 服务器监控工具
将Apache Web 服务器监控纳入 IT 基础架构管理策略有助于先发制人地识别性能瓶颈,这种主动监控方法提供必要的数据,以确保 Web 服务器能够胜任任务,并在需要时进行优化。保证客户获得流畅、无忧的用户体验可以大大有助于巩固他们对组织的信任…...
MySQL执行语句 Table ‘mysql.servers‘ doesn‘t exist
执行语句报错: mysql> flush privileges; ERROR 1146 (42S02): Table mysql.servers doesnt exist解决: 进入数据库 删除servers表 mysql> use mysql Database changed mysql> drop table if exists servers; Query OK, 0 rows affected, …...
在datagridview列显示下拉操作
DataGridViewComboBoxExColumn 设定好类型 需要设置的地方是: 绑定数据的操作: 因为此处绑定数据实际为数据 参数 显示的操作,不影响datasource的数据绑定 下一步 数据绑定: DGVCOrderZhuangtai.ValueType typeof(EOrderZhuan…...
基于人工智能 RL 算法的边缘服务器智能选择 模式研究
提出了一种基于人工智能深度强化学习算法的扩展性及智能性较高的智能选择模式。在人工智能深度强化学习 算法的基础上,引入了动作抑制、四重 Q 学习 (QQL) 及归一化 Q-value 等机制,研究并实现了在满足业务延迟要求及公平 性的原则下,物联终端…...
JavaScript流程控制语句
代码块: JS中,可以通过代码块来为代码进行分组, 在同一个代码块中的代码就属于一组代码 这组代码要么全都执行,要么都不执行 JS的代码块比较奇葩。 通常情况下,代码块对于外部来说应该是隔离的, 在代…...
01.Git分布式版本控制工具
一、Git简介 Git是一个开源的分布式版本控制系统,可以有效、高速地进行从很小到非常大的项目的版本管理。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 二、版本控制器方式 1.集中式版本控制工具 版本库放在中央服务器中&…...
Hudi介绍
在数据不断写入 Hudi 期间,Hudi 会不断生成 commit、deltacommit、clean 等 Instant 记录每一次操作类型、状态及详细的元数据,这些 Instant 最终都会存到 .hoodie 元数据目录下,为了避免元数据文件数量过多,ActiveTimeline 越来越…...
MYSQl基础操作命令合集与详解
MySQL入门 先来个总结 SQL语言分类 DDL(Data Definition Language) - 数据定义语言: 用于定义和管理数据库结构,包括创建、修改和删除数据库对象。 示例:CREATE, ALTER, DROP等语句。 DML(Data Manipulation Lan…...
【Flink名称解释一】什么是cataLog
Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。 数据处理最关键的方面之一是管理元数据。 元数据可以是临时的,例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是持久化的&#x…...
ES如何提高准确率之【term-centric】
提高准确率的方法有很多,但是要在提高准确率的同时保证召回率往往比较困难,本文只介绍一种比较常见的情况。 问题场景 我们经常搜索内容,往往不止针对某个字段进行搜索,比如:标题、内容,往往都是一起搜索…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
