我试图创建一些"命令" - 基本上是定义命令名称的字符串,以及与之相关的大约4个函数。通常,我会捆绑每个"命令"进入一个静态类,每个命令只有很多不同的静态类。
但是,我还希望能够获得所有可用命令的列表,因此我可以通过知道命令名来调用函数 - 这不能用静态类完成。
我考虑使用反射来构建列表。我还考虑过使用单例模式,并在每个构造函数中,将单个对象添加到由所有"命令共享的静态列表中。类。虽然这些方法都不是特别整洁......
这种情况是否有设计模式?或者过去人们使用的任何方法?所有建议都赞赏!
我使用的是C#,虽然它并不是真的与问题相关。
答案 0 :(得分:1)
您已经概述了两种最佳方法。
注册表模式是您拥有一个包含所有可用命令列表的类(注册表)的地方。好处是它很简单,缺点是开发人员需要知道命令需要注册。使用基类来帮助指导开发人员(谁将编写更多命令)做什么。
可插入模式是您使用反射查找当前AppDomain中所有已加载类型的位置。这样做的好处是它可以在应用程序加载后完成,为您提供动态加载程序集的选项。
为了帮助保持代码的可维护性,我建议您在指导开发人员(谁将制作新命令)时做最简单的工作。
答案 1 :(得分:0)
我不知道我这样做是按照特定模式建模的,但我在生产中使用的程序使用了Dictionary和接口。界面很简单
public interface KeyboardActionCommand
{
void ExecuteOnKeyDown();
void ExecuteOnKeyUp();
}
在这种情况下使用Dictionary<string, KeyboardActionCommand>
来制作预定义命令的列表很简单。如果在我的情况下我最终不得不添加自定义,例如当我创建一个名为{{的新类时通过它打开一个程序的名称推断,但是制作该类的一组预定义版本是不切实际的。我不得不创建一个类来帮助构建这些类型的命令。虽然我的词典中确实有一些。例如我OpenProgramKeyboardActionAcommand
所以它确实有退缩。
另一个想法是为字典的值部分创建一个委托。然后,您可以创建具有一堆已实现的委托方法的静态类。那个也不错。