调解员模式或责任太大

时间:2009-05-19 12:31:08

标签: design-patterns language-agnostic mediator

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

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

由于它对系统了解很多,这种用法在一个地方是否有太大的责任,或者这是模式的正确用法?

3 个答案:

答案 0 :(得分:3)

通常我会使用命令模式:

  1. 用户点击菜单栏上的“Foo”按钮,该按钮执行FooButtonClickedCommand。
  2. FooButtonClickedCommand执行它应该做的任何事情,然后适当地修改视图(菜单栏,表格等)。
  3. 因此,您的命令可以了解所有视图组件,但视图组件唯一需要知道的是当用户完成给定操作时要执行的命令。

答案 1 :(得分:1)

我会使用被动视图,您可以阅读here

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

请注意,UI界面之外的任何地方都无法了解按钮,复选框等。您可以使用Interface来抽象实际的实现。

这会给你带来几个好处。首先,它将记录您的代码如何与UI交互,为您提供实现模拟对象以用于自动化测试的位置,并最终允许更改UI的更多自由度。

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

答案 2 :(得分:-3)

听起来比另类更好......但是,嘿,我和最丑陋的妹妹结婚了; - )