练习题问题:
下面是命令设计模式在游戏中的一个可能的实现,例如Pacman。在这个特定版本的PacMan游戏中,用户可以发出命令,在四个方向(右、左、上、下)中的任何一个方向移动PacMan。还有一个单独的命令用于攻击碰巧在同一位置的其他演员,比如幽灵。所有命令的接收器是PACMAN(未示出)。
现在要求您实现一个允许用户定义宏的新需求,即可以作为一个命令执行的命令组合。以下是这类宏命令的三个示例:
描述如何修改系统设计的这一部分以适应新的需求。不要关心用户界面的更改,例如如何修改GUI以允许用户定义宏。您还必须描述为什么您认为修改后的设计是最合适的解决方案。
明确指出“东北”这样的宏命令将如何实现(伪Eiffel代码就足够了)。
我的尝试:
从composite_command中,新的宏命令类(如northeast)将从它继承,并且在“northeast”的execute方法中,我将循环子级列表并调用它们的execute方法。像children[I].execute这样,当客户端创建宏对象时,它可以向右向上传递将添加到northeast子级列表中,并且execute将调用它们子级的execute。
我的尝试正确吗?
是的,这是正确的。我提供了用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();
}
}
您还必须描述为什么您认为修改后的设计是最合适的解决方案。
因为它促进了代码的重用,并且很少会损坏某些东西。而且客户端也不需要更改,因为宏命令也是命令。
组合(Composite) Intent 将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。 Class Diagram 组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。 组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶
介绍 组合模式(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 常见的场景有asp.net里的控件机制(即control里可以包含子control,可以递归操作、添加、删除子control),类似的还有DOM的机制,一个DOM节点可以包含子节点,不管是父节点还是子节点都有添加、删除、遍历子节点的通用功能。所以说组合模式
本文向大家介绍java设计模式之组合模式(Composite),包括了java设计模式之组合模式(Composite)的使用技巧和注意事项,需要的朋友参考一下 概述 是一种结构型模式,将对象以树形结构组织起来,以表示“部分 - 整体”的层次结构,使得客户端对单个对象和组合对象的使用具有唯一性。 UML类图 上面的类图包含的角色: Component:为参加组合的对象声明一个公共的接口,不管是组合还
本文向大家介绍JavaScript组合设计模式--改进引入案例分析,包括了JavaScript组合设计模式--改进引入案例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript组合设计模式--改进引入案例。分享给大家供大家参考,具体如下: 对于组合设计模式: (1)组合模式中把对象分为两种(组合对象,和叶子对象) (2)组合对象和叶子对象实现:同一批操作 (3)对组
本文向大家介绍23种设计模式(10)java组合模式,包括了23种设计模式(10)java组合模式的使用技巧和注意事项,需要的朋友参考一下 23种设计模式第四篇:java组合模式 介绍 组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕. 组合模式可以优化处理递归或分级数据结
本文向大家介绍深入理解JavaScript系列(40):设计模式之组合模式详解,包括了深入理解JavaScript系列(40):设计模式之组合模式详解的使用技巧和注意事项,需要的朋友参考一下 介绍 组合模式(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 常见的场景有asp.net里的控件机制(即control里可以包