在王者荣耀角度下分析面向对象程序设计B中23种设计模式之命令模式

本文详细解析了王者荣耀游戏中如何运用命令模式提升团队沟通效率。通过将游戏操作指令封装为独立对象,实现了请求者与接收者之间的解耦,使游戏指令传递更为高效、灵活。文章深入介绍了命令模式的四大角色:接收者、请求、命令接口与具体命令,并通过实例代码展示了其在游戏场景中的具体应用。

命令模式在王者荣耀中的应用

命令模式应用一:
在这里插入图片描述
命令模式应用二(“多按钮”应用):
在这里插入图片描述

一、简述

王者荣耀是一款5v5的团队竞技游戏,良好的团队信息交流可以让玩家更好地领略英雄竞技的酣畅淋漓!为了保证局内交流的有效性和快捷性,天美团队在制作游戏时,在小地图下边设置了三个“开始撤退”、“发起进攻”、“请求集合”按钮(如上图箭头所指)。

二、命令模式

命令模式理解
把操作写在类里面,作为函数调用它;
调用者实现功能时只需调用Command抽象类的execute()方法就可以,不需要了解到底是哪个接收者执行。
命令模式是一种高内聚的模式。

命令模式的结构中包括四种角色
接收者(Receiver):执行具体行为、请求。
命令(Command)接口:命令的统一父类抽象类/接口
具体命令(ConcreteCommand):具体请求的封装
请求者(Invoker):发出请求

命令模式的UML类图
在这里插入图片描述
命令模式的本质封装请求

命令模式的优缺点
优点:高内聚低耦合、可扩展性、更动态的控制、能很自然地复合命令;
缺点:可能会导致某些系统有过多的具体命令类。

三、王者荣耀角度下实现命令模式代码及结构图

应用一代码实现:

实现此应用的UML类图
在这里插入图片描述
eclipse结构图
在这里插入图片描述

主函数【应用(Application)】

package angle_command;
/*
       main:
       分别创建各个角色,请求者发出请求,间接触发具体行为 
 */
public class Application{
   
   
	public static void main(String[]args){
   
   
	    //分别创建各个角色
		TeammateRequest1 faqijingong=new TeammateRequest1();  //创建接收者TeammateRequest1
		Command request1_attack=new ConcreteCommandAttack(faqijingong);  //创建具体命令发起进攻并指定接收者TeammateRequest1
		PlayerRequests wanjia=new PlayerRequests();   //创建请求者PlayerRequests 
		//命令模式的使用
		wanjia.setCommand(request1_attack);
		wanjia.startExecute();
		
		TeammateRequest2 qingqiujihe=new TeammateRequest2(); //创建接收者TeammateRequest2
		Command request2_gather=new ConcreteCommandGather(qingqiujihe);//创建具体命令请求集合并指定接收者TeammateRequest2
		wanjia.setCommand(request2_gather);
		wanjia.startExecute();
		
		TeammateRequest3 kaishichetui=new TeammateRequest3();//创建接收者TeammateRequest3
		Command request3_retreat=new ConcreteCommandRetreat(kaishichetui);//创建具体命令开始撤退并指定接收者TeammateRequest3
		wanjia.setCommand(request3_retreat);
		wanjia.startExecute();
	}
}

命令(command)接口

package angle_command;
/*
          角色1 : 命令的统一父类(抽象类或接口),声明命令函数,执行命令。
          命令接口中规定了用来封装“请求”的方法
*/
public interface Command {
   
   
	public abstract void execute();

}

具体命令(ConcreteCommand)之发起进攻

package angle_command;
/*
      角色2.1:具体命令,是命令的子类或实现类
      包含一个接收者的属性成员变量 
      通过命令execute()函数,触发接受者的具体行为
      实现某个请求、操作的封装
*/
public class ConcreteCommandAttack implements Command{
   
   
	TeammateRequest1 requests1;//UML 关联关系
	//构造函数传入成员变量
	ConcreteCommandAttack(TeammateRequest1 requests1)
	{
   
   
		this.requests1=requests1;
	}
	public void execute(){
   
   //玩家的请求:“ConcreteCommandAttack的实例调用attack()”封装到一个具体命令对象的execute()方法中
		requests1.attack(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣仔!最靓的仔!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值