命令模式

对命令模式的理解

我的理解就是:将抽象出来的概念转化为数据。即抽象出来的概念存放在变量中。

香蕉、苹果最终抽象为水果,而我们将水果放在变量中。

配置映射输入

有四个按钮,当玩家按下时需要触发不同的功能。

它的代码逻辑

public class InputHandler{
	public void HandleInput(){
		if(按下X) Jump();
		else if(按下Y) Fire_Gun();
		else if(按下A) Swap_Weapon();
		else if(按下B) Lurch();
	}
}

这个函数通常需要每帧都会调用。

现在有一个需求:我可以自定义设置按下某个某个按钮需要做什么,这个取决于玩家的设置。比如说我想要设置按下A,需要开枪,按下X,切换武器。

这又会怎么去实现呢?

将跳跃、开枪、切换武器、潜行这些行为封装成一个又一个的类,然后用变量去存储类。

做一个基类去控制这些行为的调用。

public class Command{
	public Command(){}
	public virtual void execute() {}
}

public class JumpCommand:Command{
	public override void execute(){
		// 跳跃逻辑
	}
}

public class FireGunCommand:Command{
	public override void execute(){
		// 开枪逻辑
	}
}

public class SwapWeaponCommand:Command{
	public override void execute(){
		// 切换武器逻辑
	}
}

public class LurchCommand:Command{
	public override void execute(){
		// 潜行逻辑
	}
}

在代码处理的时候,用变量去存储这些逻辑

public class InputHandler{
	Command ButtonX_;
	Command ButtonY_;
	Command ButtonA_;
	Command ButtonB_;
	public void HandleInput(){
		if(按下ButtonX_) ButtonX_.execute;
		else if(按下ButtonY_) ButtonY_.execute;
		else if(按下ButtonA_) ButtonA_.execute;
		else if(按下ButtonB_) ButtonB_.execute;
	}
}