注册公司需要的网站建设,深圳宝安区深圳网站建设 骏域网络,asp.net网站维护,计算机外包公司有哪些1、模式标准
模式名称#xff1a;责任链模式
模式分类#xff1a;行为型
模式意图#xff1a;使多个对象都有机会处理请求#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链#xff0c;并沿着这条链传递该请求#xff0c;直到有一个对象处…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);
// 输出
// 释放中技能