【发布时间】:2014-08-26 16:42:22
【问题描述】:
我正在实现命令设计模式,但我的命令需要向用户询问文件名。我不确定命令如何要求它?
四本书的帮派似乎触及了这个问题,但我不太清楚。下面是我的代码(伪代码是正确的并且是即时编写的)。
class OpenDocumentCommand : public Command
{
virtual char * AskUserForFileName();
virtual void Execute();
Application _App;
}
void OpenDocumentCommand::Execute()
{
char * fileName = AskUserForFileName();
_App.OpenDocument( fileName );
}
现在在典型的简单示例中,AskUserForFileName() 可以是 cin 和 cout,但它如何在适当的 Windows 应用程序中询问文件名?它应该打开文件资源管理器并且用户可以选择文件名?
这是否意味着它必须与windows紧密耦合?我的计划是在 Windows 和 iOS 上都使用此代码,所以我想要一个解耦的解决方案。
【问题讨论】:
-
之前只需在单独的对话框中询问文件名,并将其作为参数传递给您的命令。
-
@πάνταῥεῖ 但这意味着一半的命令是在命令之外执行的。 command 的目标之一是稍后打包和执行命令。
-
'to package' 这究竟是什么意思?恕我直言,命令应配置它们需要执行的所有参数,无需进一步交互。
-
'这是否意味着它必须与 windows 紧密耦合?'如果您想将 GUI 代码与命令分开,请使用 layers 模式 和表示层中的 GUI。这类似于 MVC 中的 View 和 Controller。
标签: c++ ios windows design-patterns command-pattern