gpt4 book ai didi

c# - 在控制台应用程序中实现导航菜单

转载 作者:行者123 更新时间:2023-11-30 20:48:16 31 4
gpt4 key购买 nike

我正在尝试使用多个多级子菜单(路径类型菜单)实现复杂的控制台菜单。也许有人建议在我的情况下使用什么设计模式?

顶部菜单示例

* Main Menu *

1. List Virtual Servers
2. List Image Templates
3. Exit

例如,如果选择了 1,则会出现下一个子菜单

* List Virtual Servers *

1. Virtual server #1
2. Virtual server #2
3. Virtual server #3
4. Return

例如,如果选择了 2,则会出现下一个子菜单

* Command for Virtual server #2 *

1. Delete
2. Return

我当前的导航代码如下,这仅适用于第一个顶部菜单,不确定如何实现多级路径类型菜单,通过菜单上下完全导航。

static void Main(string[] args)
{

Console.WriteLine("1. List Virtual Servers" +
Environment.NewLine + "2. List Image Templates" +
Environment.NewLine + "3. Exit");

var input = Console.ReadKey();
var key = input.KeyChar;
int value;
if (int.TryParse(key.ToString(), out value))
{
Console.WriteLine();
RouteChoice(value);
}
else
{
Console.WriteLine("Invalid Entry.");
}

Console.Write("Press any key to exit...");
Console.ReadKey(false);

Console.ReadLine();

}

private static void RouteChoice(int menuChoice)
{
switch (menuChoice)
{
case 1:
GetVirtualServers();
break;
case 2:
GetImageTemplate();
break;
default:
Console.WriteLine("Invalid Entry!");
break;
}
}

最佳答案

我的想法是将菜单项的层次结构建模为树,并在用户浏览菜单时遍历这棵树。从设计模式的角度来看,它将是 Composite 和 Command + 一些树遍历的混合体。为此,我们需要:

  1. 一个基类 BaseCommand,用于对菜单中的每个命令进行建模。

  2. 派生自 BaseCommand 的基类 Command 用于执行某些逻辑的菜单项 - 用于树中的叶子。

  3. 派生自 BaseCommand 的基类 CompositeCommand 用于带有子命令的命令。此类将具有 Children 属性,该属性将存储 BaseCommand 类型的对象。

  4. 可以执行某些逻辑的每个命令,例如虚拟服务器 #1 应派生自 Command

  5. 每个有子命令的命令,例如List Virtual Servers 应该派生自 CompositeCommand

  6. 在您的程序开始时,您应该创建一个命令树。在您的例子中,我们将在这棵树的根部找到主菜单Main MenuChildren 属性将包含对List Virtual ServersList Image Templates退出等等。

  7. 此解决方案的最后一部分是经理。经理是一个类,必须跟踪我们在树中的位置。当管理器收到来自用户的输入时,他可以做 3 件事:如果它是一个叶子,则执行当前命令;如果用户选择返回,则移动到当前命令的父级;移动到一个当前命令的子命令(如果有的话)。

关于c# - 在控制台应用程序中实现导航菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24859559/

31 4 0