我正在尝试用多个多级子菜单(路径类型菜单)实现复杂的控制台菜单。也许有人建议在我的情况下使用什么样的设计模式?
顶部菜单示例
*主菜单* 1.列出虚拟服务器2.列表图像模板3.退出
如果选择了1,则会出现下一个子菜单。
*列出虚拟服务器* 1.虚拟服务器#12.虚拟服务器# 2 .虚拟服务器# 3 .虚拟服务器#3.返回
如果选择了例如2,则会出现下一个子菜单。
*虚拟服务器命令#2 * 1.删除2.返回
我目前的导航代码如下,这是只为第一个顶部菜单,不确定如何实现多级路径类型菜单与全面导航上下通过菜单。
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;
}
}发布于 2014-07-21 08:09:02
我的想法是将菜单项的层次结构建模为树,并在用户浏览菜单时遍历这棵树。从设计模式的角度来看,它将是复合和命令+一些树遍历的混合体。为此,我们需要:
发布于 2016-01-28 12:17:58
我已经编写了控制台菜单,它可能是对您有用的起点。
CMenu是一个在.Net中构建控制台菜单的轻量级的、低仪式的框架。您不用手动提示用户输入和解析它,而是以简短、结构化和全面的方式定义命令,让CMenu来处理其余的命令。 CMenu的目标是低开销-简单的东西应该是简单的实现。如果你不使用一个功能,你不需要知道它的任何东西。 同时,支持复杂的场景。大型菜单可以很容易地分成几个类。背景自配置。你不需要担心所有烦人的细节涉及到更大的菜单,它将只是工作。 最重要的是,它是非常简单和快速的使用。命令可以缩写,智能解析器甚至支持部分匹配。帮助命令是集成的。
它的编写并没有考虑到这种编号的操作风格,但是它可以被模仿,如果您将命令命名为“1.foo”、“2.bar”等,它应该可以很好地工作。
继承系统非常简单(只从CMenuItem派生并覆盖Execute),或者如果您愿意,甚至可以使用lambdas代替。
var menu = new CMenu ();
menu.Add ("1. foo", s => Console.WriteLine ("Foo!"));
menu.Add ("2. bar", s => Console.WriteLine ("Bar!"));
menu.Run ();菜单项树支持得很好,请参阅此页为示例。例如(创建分层菜单的其他方法):
var m = new CMenu () {
new CMenuItem ("1") {
new CMenuItem ("1", s => Console.WriteLine ("1-1")),
new CMenuItem ("2", s => Console.WriteLine ("1-2")),
},
new CMenuItem ("2") {
new CMenuItem ("1", s => Console.WriteLine ("2-1")),
new CMenuItem ("2", s => Console.WriteLine ("2-2")),
},
};更新:下一个版本(0.8)中将包含通过单号键按下的选择。
https://stackoverflow.com/questions/24859559
复制相似问题