3

在我的应用程序中,我有几个必须相互了解的组件,例如菜单栏和工具栏,它们都需要了解表格以添加或删除作业并找出选择了哪个作业。

因此,我创建了一个名为的对象guiMediator,我将其传递给每个对象,并且他们使用它注册自己,以便他们可以使用该对象相互联系。它还负责在添加新工作或后台工作人员完成工作时触发事件。

既然对系统了解很多,那么这种用法是不是在一个地方责任太大了,还是这个模式的正确用法呢?

4

3 回答 3

3

通常我会使用命令模式来做类似的事情:

  1. 用户单击菜单栏上的“Foo”按钮,该按钮执行 FooButtonClickedCommand。
  2. FooButtonClickedCommand 做它应该做的任何事情,然后适当地修改视图(菜单栏、表格等)。

所以你的命令知道你所有的视图组件,但你的视图组件唯一需要知道的是当用户完成给定动作时要执行哪个命令。

于 2009-05-19T12:40:46.343 回答
1

我会使用被动视图,您可以在此处阅读。

  • 您会将每个表单放在一个界面后面
  • 每个表单都会使用一个或多个 UI 对象注册自己
  • UI 对象应该是自然组织的,如 Setup、Entry、Display 等。文字处理器可能只有一个 UI 对象用于每个文档。而机器控制器可能对每个屏幕有多个对象。
  • 该接口被实现为将事件传递给 UI 对象并公开表示控件、向 UI 对象绘制表面的薄壳。
  • UIObject 然后接受输入并计算出要执行的命令对象
  • 命令对象将更新模型,然后告诉一个或多个 UI 对象更新视图。
  • UIObjects 更新视图。

请注意,除了 UI 界面之外,其他任何地方都不知道按钮、复选框等。您使用接口抽象出实际的实现。

这会给你带来几个优势。首先,它将记录您的代码如何与 UI 交互,为您提供一个实现模拟对象以用于自动化测试的地方,最后为更改 UI 提供更大的自由度。

例如替换可点击面板而不是命令按钮。然后表单将开始从面板而不是按钮传递点击事件。表单可能不知道每个小部件应该执行的实际命令。UI 对象负责处理这些。

于 2009-05-19T12:49:59.397 回答
-3

听起来比另一种更好......但是,嘿,我嫁给了最不丑的妹妹;-)

于 2009-05-19T12:33:54.873 回答