设计模式 - 理解外观模式

2023-12-09

我是设计模式的新手,正在尝试了解它们通常的样子。现在我正在尝试理解外观模式。我觉得外观模式是一个相当广泛的概念,所以我想知道我的第二个图是否会被视为外观模板的一部分。

我知道一个典型的外观模式基本上是这样的(A 级是外观):

enter image description here

但是如果我们有一个更微妙的图表,如下所示:

enter image description here

A 级仍会被视为外观级还是取决于上下文?


首先,为了理解门面,我喜欢将其视为一种重构。想象一下你的两个图表without门面类。客户端必须直接与外观管理的所有类进行交互。因此,它们会更加复杂,耦合性更强。

外观为客户端提供简化的服务(减少耦合),隐藏复杂性behind门面。

我最喜欢的例子(Java)是JOptionPane班级。它在 Java 的最早版本中不存在,如果您想创建是/否问题对话框,您(作为客户端)必须管理对 Dialog、Button 等的所有调用以及处理事件,等等。所有这些复杂性都被简化为内部的静态方法JOptionPane门面类。这是来自的 UML 图https://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/facade.html

enter image description here

现在回答你的问题:

A 级仍会被视为外观级还是取决于上下文?

If A为客户提供简化的服务,有效地使用复杂的子系统B, C, F and E,如果没有它,客户将不得不直接与他们所有人交互(耦合),那么我会说A是一个门面。

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

设计模式 - 理解外观模式 的相关文章

  • 如何在Java中实现复合模式?

    我想实现一个复合模式Java以便绘制软件开发组织图 因此 我们假设有多个项目经理和多个开发人员 每个开发人员都被分配给一位项目经理 并且每个开发人员都能够使用各种编程语言进行编码 项目经理领导开发人员并准确了解他们的工作量 我对这个设计模式
  • 是检测异常并抛出它们还是让运行时抛出它们更好?

    假设有这样的设置 public class MyClass public void DoSomething string Data if String IsNullOrWhiteSpace Data throw new NullRefere
  • 当前线程中的单例

    我的单身人士如下 public class CurrentSingleton private static CurrentSingleton uniqueInstance null private static object syncRoo
  • Android Studio 上的代码 Iris 插件

    我正在尝试使代码 iris 插件在 Android studio 上工作 我按右键单击 gt 创建代码虹膜图 然后我收到一条通知 表明我的图表已准备就绪 但我不知道该图何时存储 创建的文件的名称是什么以及如何打开它 有任何想法吗 CODE
  • Yegge 的原型模式示例如何处理实例变量?

    我喜欢史蒂夫 耶吉的原型模式示例 http steve yegge blogspot com 2008 10 universal design pattern html并决定快速制作一个概念验证示例 不过 我并没有真正考虑清楚 虽然它非常适
  • 如何设计/规划Web应用程序开发?

    我有兴趣学习如何在多个开发团队场景中设计 规划 Web 应用程序开发 担任 项目经理 主管 的角色 成功的 Web 应用程序开发需要哪些 文档 需要哪些 UML 图以及需要到什么程度 在设计 计划阶段 是否需要根据用例对每个类进行图表化 类
  • tbb:并行查找第一个元素

    我遇到了这个问题 查找列表中满足给定条件的第一个元素 不幸的是 该列表相当长 100 000 个元素 并且使用单个线程评估每个元素的条件总共需要大约 30 秒 有没有办法干净地并行化这个问题 我浏览了所有tbb模式 但找不到任何合适的 UP
  • Scala 功能设计模式目录

    一周以来我一直在阅读 Scala 编程 作者一步一步地介绍了该语言的元素 但我仍然很困惑何时使用演员 闭包 柯里化等功能性的东西 我正在寻找功能结构的典型用例或最佳实践的目录 我并不是说在 Scala 中重新实现像 GoF 这样的众所周知的
  • 这种模式叫什么?软锁?

    这是我有时必须编写的一些代码 大部分与 UI 内容结合使用 并且总是与可能意外陷入无限循环的事件相关 public class MyClass public event EventHandler MyEvent private bool I
  • 是否有适用于 Java 的 Harel Statechart DSL 工具?

    我正在寻找一种能够理解 DSL 的工具 在其中我可以定义生成 Java 代码的状态图 或者 DSL 中的状态图可以按原样运行 该工具最好用 Java 编写 并且必须根据 Harel 状态图 或等效的 UML 2 状态机 的定义支持超级状态和
  • 池和集群之间的区别

    从最纯粹的角度来看 它们感觉像是相同的概念 两者都管理资源 节点集并控制来自外部组件或由外部组件进行的访问 通过池 您可以向池借用这些资源 节点 也可以从池中归还这些资源 节点 对于集群 您在资源 节点前面有一个负载均衡器 并且您可以向负载
  • 具有线程安全性的 eventbus 最佳实践

    我的应用程序具有用户交互活动和后台服务 这是修改数据模型的唯一地方 后台服务监听用户所做的操作以及来自网络的传入消息 因此 可能会出现并发问题 我尝试使用处理程序来防止这些问题 对于事件层 我使用 greenrobots Eventbus
  • REST API 登录模式

    我正在创建一个 REST api 严格遵循 apigee 建议 使用名词而不是动词 将 api 版本烘焙到 URL 中 每个集合有两个 api 路径 GET POST PUT DELETE 用法等 我正在开发登录系统 但不确定登录用户的正确
  • 如何在 Java 中创建具有相同类型参数的方法?

    我的代码如下所示 enum EnumType CATEGORY GROUP MAIN Methods public void call EnumType type switch type case CATEGORY return metho
  • 类图:我可以分享一个作品吗?

    假设我正在使用 mvc 模式用 C 制作一个简单的游戏 并且有一个世界对象 其生命周期由控制器类管理 这显然像是一个组合 但是如果游戏逻辑类也需要对同一个世界的永久引用 或者这个世界的环境 由世界拥有 需要对其的引用 这些只是常规关联吗 或
  • 如何在C++中正确实现工厂方法模式

    C 中有这样一件事让我在很长一段时间内感到不舒服 因为老实说我不知道 该怎么做 尽管它听起来很简单 如何在 C 中正确实现工厂方法 目标 允许客户端使用工厂方法而不是对象的构造函数来实例化某个对象 而不会产生不可接受的后果和性能影响 我所说
  • 全局常量是反模式吗?

    我一直认为仅仅为了保持常量而创建一个类是一个糟糕的设计 但最近 我尝试用谷歌搜索它 发现只有一个界面作为常量是不好的反模式 没有提到使用一类常量 我认为 由于常量类实际上与全局变量没有太大区别 这就是我反对它并倾向于重构此类类的原因 它创建
  • 如何制作抗崩溃的ios应用程序

    我现在正在编写 ios 应用程序一段时间 但我的应用程序仍然经常崩溃 并且需要时间才能使它们变得非常稳定 我觉得这很烦人 那么 有没有关于防崩溃编程ios应用程序的编程模式呢 打开编译器警告 删除所有警告 运行静态分析器 删除所有警告 使用
  • 使用策略和工厂模式进行依赖注入

    我正在开展一个业余项目 以更好地理解控制反转和依赖注入以及不同的设计模式 我想知道是否有将 DI 与工厂和策略模式结合使用的最佳实践 当策略 从工厂构建 需要每个可能的构造函数和实现不同的参数时 我面临的挑战就出现了 因此 我发现自己在服务
  • 带双重检查锁的单例设计模式

    假设您有以下代码 1 为什么我们使用双重检查锁 为什么单锁不够好 请提供详细的例子 2 这种实施方式的主要缺点是什么 我该如何证明呢 Thanks public sealed class SomeSingleton5 private sta

随机推荐