中介者模式与创建

2024-01-17

我的演示文稿中有几个需要相互交互的“小部件”,但交互已经变得足够复杂,需要一个新对象来处理交互。

在尝试通过中介者作为该对象进行工作时,我对如何有效地构建参与者感到困惑。中介者必须了解小部件,而小部件也必须了解中介者。

使用下面的玩具类,有人可以向我展示构造函数的外观以及它们通常创建的顺序吗?

Cheers,
Berryl

class WidgetOne {       
    Mediator _mediator;
} 

class WidgetTwo {       
    Mediator _mediator;
} 

class Mediator {    
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;               
}

这确实取决于许多其他情况,但我可能会这样做:

class Mediator {    
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;   

    void setWidgetOne(WidgetOne one){_widgetOne = one;}
    void setWidgetTwo(WidgetTwo one){_widgetTwo = one;}            
}

class WidgetOne {
    Mediator me
    void WidgetOne(Mediator me){
        this.me = me
        me.setWidgetOne(this);
    }
}

class WidgetTwo {
    Mediator me
    void WidgetTwo(Mediator me){
        this.me = me
        me.setWidgetTwo(this);
    }
}

Mediator me = new Mediator();
WidgetOne one = new WidgetOne(me);
WidgetTwo two = new WidgetTwo(me);

当然,如果没有其他需要了解小部件的信息,那么我将摆脱设置器并只使用以下内容:

class Mediator {    
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;   

     void Mediator(){
        _widgetOne = new WidgetOne(this);
        _widgetTwo = new WidgetTwo(this);
     }            
}

class WidgetOne {
    Mediator me
    void WidgetOne(Mediator me){
        this.me = me
    }
}

class WidgetTwo {
    Mediator me
    void WidgetTwo(Mediator me){
        this.me = me
    }
}

其他几个简短的...简短的形式:

// Factory:

class Mediator {    
    WidgetOne _widgetOne;
    WidgetTwo _widgetTwo;   

     void Mediator(){
        _widgetOne = WidgetFactory.getW1(this);
        _widgetTwo = WidgetFactory.getW2(this);
     }            
}

class W1 {
    Mediator me
    void W1(){
    }
    void setMediator(Mediator med){me = med}
}

class WidgetFactory {
    W1 getW1(Mediator me){ W1 w = new W1(); w.setMediator(me); return me}
}


// Centralized "model" (variant of factory)
class Mediator {
   W1 w1;

   static Mediator getInstance(){ return inst; }// See Singleton

   void registerW1(W1 w){w1 = w; w.setMediator(this);}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中介者模式与创建 的相关文章

  • 什么是 css“设计模式”的良好在线资源? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 具体来说,什么属于模型、视图和控制器?

    我一直在学习模型 视图 控制器范例 MVC 但我很困惑 因为有些教程与其他教程相矛盾 我目前对这个过程的理解是这样的 路由器 调度器 前端控制器 尽管 MVC 名称中没有具体提及 但 Router 仍然是一个非常重要的部分 正是在这里 请求
  • 为什么所有的 Active Record 都讨厌? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Meyers 的单例实现实际上是如何实现单例的

    我读了很多关于单例的内容 什么时候应该使用它们 什么时候不应该使用它们 以及如何安全地实现它们 我正在用 C 11 编写 并且遇到了 Meyer 的单例延迟初始化实现 如所示这个问题 https stackoverflow com ques
  • 注册模式和注册对象的延迟实例化

    让我们想象一下我们有注册表模式
  • 向项目添加资源的设计

    我有课Project Resource and File where A Project包含列表资源 Each Resource包含以下列表Files特定类型的 这被映射到 XML
  • 复制粘贴编码是否可以接受?

    人们普遍认为复制和粘贴编程是一个坏主意 但是处理两个函数或代码块确实需要的情况的最佳方法是什么 do只需要在几个方面有所不同就会使概括它们变得极其混乱 如果除了一些细微的变化之外 代码基本上是相同的 但这些细微的变化并不容易通过添加参数 模
  • 这是一个不正确的警告吗?

    让我们看看我经常看到的这个代码模式 struct Foo template
  • PHP 设计模式

    好的 我想首先让您注意到我一直在寻找 php mvc 设计模式 所以我还没有真正找到我想要的东西 现在 在写我的问题时 我找不到我要问的任何相关且具体的问题 但我知道我可能是错的 无论如何考虑这个问题和一个可能有用的问题包 Question
  • 是否有用于序列化和反序列化各种格式的对象层次结构的模式?

    给定一个复杂的对象层次结构 幸运的是它不包含循环引用 如何实现支持各种格式的序列化 我不是来讨论实际实施的 相反 我正在寻找可能派上用场的设计模式的提示 更准确地说 我正在使用 Ruby 我想解析 XML 和 JSON 数据以构建复杂的对象
  • 使用“旧”对象引用使用构建器模式创建新对象

    我正在尝试构建器模式 并陷入如何向新创建的对象添加新 属性 的困境 public class MsProjectTaskData private boolean isAlreadyTransfered private String req
  • Javascript 沙箱模式示例实现

    在 Stoyan Stefanov 的伟大著作 JavaScript Patterns 的第 101 页中 他解释了沙箱模式 我非常喜欢他的书 但我真的错过了一些现实生活中的例子 然后更好地理解他所谈论的内容 我正在寻找一个现实生活中的工作
  • C++ 包装类的设计

    我必须使用一个界面非常笨拙的旧类 由于我无法更改它并且依赖它 因此我想构建一个包装器 提供一个干净的界面 假设我有课笨手笨脚的班级 基本上 我有三种方法 1 参考会员 Class Wrapper public Wrapper ClumsyC
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • AngularJS 服务并承诺最佳实践

    我有一个 AngularJS 应用程序services 调用 http资源并返回promise我在控制器中解决了这个问题 这是我正在做的事情的示例 app service Blog function http q var deferred
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • 如何简化 ASP.NET MVC 中的全状态交错模式对话框

    我需要在多对多模式对话框中保留状态渐进增强 http en wikipedia org wiki Progressive enhancementASP NET MVC 项目中的方式 在我的代码中 当禁用 javascript 时 模式对话框
  • 发布者-订阅者与观察者[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 工厂模式中创建者的角色

    我无法理解为工厂类定义抽象类 接口的作用 这是我在网络上的所有教程中总是看到的东西 有人可以阐明 CreatorInterface 的重要性吗 工厂模式参考UML图 https i stack imgur com 3VpUM png 为了以
  • 工厂模式但带有对象参数

    采用以下经典工厂模式 public interface IPizza decimal Price get public class HamAndMushroomPizza IPizza decimal IPizza Price get re

随机推荐

  • 可以暂停 MATLAB 吗? [复制]

    这个问题在这里已经有答案了 在 MATLAB 中 我正在运行一些需要一段时间才能运行的代码 我想暂停代码来检查一些变量值 有没有办法可以做到这一点 而不必从头开始重新运行代码 我不想终止程序 暂停一下吧 您可以通过我知道的两种方式停止执行并
  • Metal:一旦为 MSL cikernel 设置编译器和链接器选项,.metal 文件中定义的 vertexFunction 将变为 nil

    metal 文件中定义的 VertexFunction 和 FragmentFunction 工作得很好 但是一旦我指定了以下编译器和链接器选项 它们就变成了 nil苹果的文档 https developer apple com docum
  • x86汇编极限新手询问:“无效的指令操作数”?

    下面的代码只是我当前尝试编写的程序的一小部分 但程序的其他部分不相关 所以我只粘贴了必要的部分 无论如何 我想要做的是将 inputLoopCounter 中存储的值移动到 ecx 中 以确定循环应该执行多少次 但是 当我尝试组装该程序时
  • windows7下如何获取MAC地址? [复制]

    这个问题在这里已经有答案了 可能的重复 获取机器的 MAC 地址 好的解决方案吗 https stackoverflow com questions 2069855 getting machines mac address good sol
  • 找不到满足版本约束的“androidx.arch.core:core-common”版本

    创建新的 Android Studio 项目 空活动类型 后 如果添加以下行 Lifecycle View Models def lifecycleVersion 2 0 0 implementation androidx lifecycl
  • 如何检测 MDIClient 窗口何时滚动

    当用户通过拖动 MDIS 客户端的滚动条拇指滚动子窗口时 我需要更新 System Windows Forms MDI 客户端容器内子窗口的位置 但是我找不到发生这种情况时触发的事件 我只是错过了它 还是我需要一个解决方法 可能是直接与滚动
  • elasticsearch python 客户端 - 与许多节点一起工作 - 如何使用嗅探器

    我有一个包含 2 个节点的集群 我试图了解连接节点的最佳实践 并在一个节点出现停机时检查故障转移 from 文档 http elasticsearch py readthedocs io en master api html nodes e
  • python 在html中显示unicode

    我正在编写脚本将我的链接及其标题从 chrome 导出到 html Chrome 书签以 json 形式存储 采用 utf 编码有些标题是俄语的 因此它们存储如下 名称 u0425 u0430 u0431 u0440 import code
  • 如何告诉 WebStorm 在 Docker 容器中查找项目?

    我当前的项目目录如下所示 backend Dockerfile NestJS Dockerfile docker Folder that contains docker compose yml file package json src f
  • ERLANG - 将列表拆分为子列表

    嗨 这是我在这里的第一篇文章 希望你们一切都好 所以我刚刚开始 erlang 我遇到了一个问题 我还不知道如何解决 所以我收到的二进制文件格式为 lt lt 56 23 67 34 45 78 01 54 67 87 45 53 01 34
  • Django REST 框架 JSONParser().parse(request) 引发错误

    在 Django 视图中 我正在尝试这样做 csrf exempt def customer list request List all customers or create a new customer if request metho
  • 在整个视图控制器中多次调用presentViewController方法会导致iOS中的内存泄漏吗?

    我知道已经有很多与这个主题相关的讨论 但在所有讨论中都讨论了 2 个视图控制器 A B 我的情况类似但又不同 当有多个视图控制器 如 A B C D 时会发生什么 所以呈现流程如下 视图控制器 A 主页 呈现视图控制器 B 列表 然后从视图
  • INSERT 语句中出现“此处不允许列”错误

    我创建了这个名为 LOCATION 的表 通过做这个 CREATE TABLE LOCATION POSTCODE VARCHAR 10 PRIMARY KEY STREET NAME VARCHAR 20 CITY VARCHAR 20
  • 在 FastCGI 和 Octave 中重新定义标准输出

    我正在努力在 Ubuntu Linux 中使用 C C 在 FastCGI 会话中实现 Octave 解释器 我遇到的问题是 FCGI 重定向stdout to FCGI 标准输出 但预编译的 Octave 头文件仍然使用正常的stdout
  • Flex:组合框控件的自定义项目渲染器截断文本

    我已经实现了一个自定义项目渲染器 我正在处理的 Flex 项目上将其与组合框一起使用 它显示每个项目的图标和一些文本 唯一的问题是 当文本较长时 菜单的宽度无法正确调整 并且文本在显示时会被截断 我尝试调整所有明显的属性来缓解这个问题 但没
  • 如何将图像保存到sqlite数据库

    在我的课程中 我有一个方法可以在照片库中搜索图像 并接收从手机摄像头拍摄的图像 我现在需要将此图像保存在 sqlite 数据库中 我正在使用像 BLOB 这样的数据库字段 但不像在 bity 中序列化图像或在decode64 中进行转换以写
  • 在 GraphQL 架构中使用数字作为键?

    您可以使用 GraphQL Schema 语言在 GraphQL Schema 中使用数字作为键吗 即 这是一个小片段 type tax code allocation country KOR states 11 tax code allo
  • 将 `:map` 的输出获取到缓冲区

    我想得到无参数的输出 map调用 以便我可以使用 vim 的搜索功能来查找映射 我发现关于 redir 它将 ex 命令的输出重定向到变量 寄存器或文件中 但它似乎不适用于 map 它必须以某种不同的方式输出映射 例如 echo hello
  • 如何使用可旁加载的证书创建 UWP 应用

    我正在尝试创建一个可以侧载到其他电脑上的 UWP 应用程序 我的主要问题是 我是否需要来自可信来源的证书来签署我的应用程序 经过大量研究后 我了解到您可以通过应用程序旁加载 安装 UWP 应用程序应用程序安装程序 https www mic
  • 中介者模式与创建

    我的演示文稿中有几个需要相互交互的 小部件 但交互已经变得足够复杂 需要一个新对象来处理交互 在尝试通过中介者作为该对象进行工作时 我对如何有效地构建参与者感到困惑 中介者必须了解小部件 而小部件也必须了解中介者 使用下面的玩具类 有人可以