实践问题:
以下是命令设计模式在游戏(如PacMan )中的可能实现。在这个特定版本的PacMan游戏中,用户可以发出命令向四个方向(右、左、上、下)移动PacMan。也有一个单独的命令攻击其他行为者,如鬼魂,碰巧在同一地点。所有命令的接收器是PACMAN (未显示)。
现在您被要求实现一个允许用户定义宏的新需求,即可以作为一个命令执行的命令组合。以下是这类宏命令的三个示例:
描述如何修改系统设计的这一部分以适应新的需求。不要关注用户界面的更改,例如如何修改GUI以允许用户定义宏。您还必须描述为什么您认为修改后的设计是最合适的解决方案。
清楚地指出如何实现诸如“东北”这样的宏命令(伪埃菲尔代码就足够了)。
我的尝试:
我使用复合设计模式,因为每个新的宏命令都是单个命令的组合,如向上、左、右或向下。
因此,我创建了另一个类composite_command,其中添加了命令列表。
从composite_command中,新的宏命令类(如东北)将继承它,并且在“东北”的执行方法中,我将循环子程序列表并调用它们的执行method.like childreni.execute,因此当客户端创建宏对象时,它可以传递将添加到东北子列表中的右上命令,然后执行将调用其子表的执行。
我的尝试正确吗?
发布于 2018-04-12 20:21:53
是的,这是正确的。我在C#中提供了示例实现:
class Program
{
public interface Command
{
void Execute();
}
public class LeftCommand : Command
{
public void Execute()
{
Console.WriteLine("Going left");
}
}
public class DownCommand : Command
{
public void Execute()
{
Console.WriteLine("Going down");
}
}
public class SouthWestMacroCommand : Command
{
IEnumerable<Command> _commands;
public SouthWestMacroCommand(IEnumerable<Command> commands)
{
this._commands = commands;
}
public void Execute()
{
foreach(var command in _commands)
{
command.Execute();
}
}
}
static void Main(string[] Args)
{
LeftCommand leftCommand = new LeftCommand();
DownCommand downCommand = new DownCommand();
SouthWestMacroCommand southWestCommand = new SouthWestMacroCommand(new List<Command>() { leftCommand, downCommand });
southWestCommand.Execute();
Console.ReadKey();
}
}您还必须描述为什么您认为修改后的设计是最合适的解决方案。
因为它促进了代码重用,所以您破坏某些东西的可能性更小。另外,客户端不需要更改,因为宏命令也是命令。
https://stackoverflow.com/questions/49787558
复制相似问题