具有实时示例的设计模式[关闭]

2024-03-09

我想通过实时示例学习设计模式。那么有人可以建议我可以从哪里开始吗?


这些经典的设计模式是每个开发人员都应该了解的,因为它有助于我们与其他开发人员在抽象层面进行沟通,并且使我们成为更好的设计师。

Note:添加带有现实生活和 Java API 示例的简短定义。

创意型

创建对象的方式,同时隐藏创建逻辑。

原型 :要复制或克隆的完全初始化的实例
示例:一家面包店使用原型蛋糕来制作新蛋糕。

  • java.lang.Object#clone()

Builder- 将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。
示例:一个软件开发团队使用各种库和框架创建新软件。

  • java.lang.StringBuilder

辛格尔顿- 只能存在一个实例的类
示例:国家总统

  • java.lang.Runtime#getRuntime()

工厂方法- 创建一个f对象类型族。
示例:在组织中,人力资源部门采用工厂方法。这里开发团队向 HR 请求所需的资源类型。根据请求类型,人力资源部门向开发团队提供资源。

  • java.util.Calendar#getInstance()

抽象工厂- 创建多个类系列的实例
示例:HP、Samsung 和 Dell 笔记本电脑均使用 Intel 和 AMD 处理器。

  • javax.xml.parsers.DocumentBuilderFactory#newInstance()

工厂方法与抽象工厂 https://stackoverflow.com/a/5740020/1697099

结构性

结构模式有助于从小对象创建大对象(即基础设施)。

Proxy- 在客户端和服务之间引入代理层以添加缓存或安全等功能。

  • java.rmi.*,实际上是整个API。

合成的- 为叶子和复合体提供统一的接口。 将对象组合成树结构以表示部分-整体层次结构,即对象既表示部分又表示整体。
示例:操作系统中的文件系统,目录是复合的,文件是叶子。系统调用Open复合材料和叶子的单一接口。

装饰者- 装饰器设计模式用于通过在核心类周围包装另一个类来添加功能,而不修改核心类。
示例:1) 添加d订单折扣 2) 枪支本身就是一种致​​命武器。但你可以应用某些“装饰”,使其更加准确、安静和具有破坏性。

  • java.io.InputStream、OutputStream、Reader 和的所有子类 Writer 有一个构造函数,采用相同类型的实例。

Facade- 为子系统中的一组接口提供统一的接口,使子系统更易于使用。
示例:控制面板、事件管理器。

  • javax.faces.context.ExternalContext,内部使用 ServletContext、HttpSession、HttpServletRequest、HttpServletResponse、 等

Adapter- 当两个不相关的接口需要一起工作时,使用适配器模式。
示例:电源适配器

  • java.util.Arrays#asList()

蝇量级- 空间优化技术,让我们通过共享数据使用更少的内存。
示例:软件开发团队使用数据库连接池来减少创建和关闭新连接的开销。

  • java.lang.Integer#valueOf(int) (也适用于布尔值、字节、字符、 短和长)

行为的

行为模式特别关注对象之间的通信,有助于松散耦合。

责任链用于沿着处理程序链传递请求。
示例:贷款或休假审批流程、Java 中的异常处理。

  • javax.servlet.Filter#doFilter()

Iterator- 遍历/顺序访问集合的元素
示例:编程语言中的 for 循环

  • java.util.Iterator 和 java.util.Enumeration 的所有实现

State- 允许对象在其内部状态改变时改变其行为
示例:循环显示红色、黄色和绿色状态的交通灯。
一种自动售货机,可以在闲置、收款、分发产品和缺货状态之间切换。
电子游戏角色可以处于站立、行走、奔跑、跳跃等状态。

Observer- 对象之间一对多的依赖关系,这样当一个对象改变状态时,它的所有依赖对象都会得到通知并自动更新
示例:社交媒体平台

  • 发布/订阅 JMS API

Visitor- 访问者模式用于向不同类型的类添加方法,而无需更改这些类。 示例:对不同类型的数据执行不同操作的数据库。 呈现不同类型 HTML 元素的 Web 浏览器。

Template- 定义操作中算法的骨架,并将一些步骤推迟到子类中。
示例:烹饪食谱,提供准备菜肴的分步模板。
软件开发生命周期,提供用于开发和交付软件的模板。

  • java.io.InputStream、java.io.OutputStream、java.io.Reader 和 java.io.Writer 的所有非抽象方法。
  • java.util.AbstractList、java.util.AbstractSet 和 java.util.AbstractMap 的所有非抽象方法。
  • javax.servlet.http.HttpServlet,所有 doXXX() 方法默认都会向响应发送 HTTP 405“方法不允许”错误。您可以自由地不实施它们或实施其中任何一个。
  • Spring 中的 JMSTemplate HibernateTemplate 和 JdbcTemplate

Command- 当请求被包装并传递给调用者时使用命令模式,调用者随后调用封装的命令。
示例:遥控器

  • java.lang.Runnable 的所有实现

Memento- 备忘录模式用于将对象的状态恢复到之前的状态。
示例:在 Windows 中保存游戏状态和撤消/重做操作,允许用户撤消和重做其操作的文本编辑器。允许用户回滚事务的数据库。

  • java.io.Serialized 的所有实现

Mediator- 中介者模式用于在不同对象之间提供集中式通信媒介。
示例:空中交通管制员(ATC)、证券交易所

Strategy- 当我们对特定任务有多种算法并且客户端决定在运行时使用的实际实现时,使用策略模式。
示例:交通方式

  • java.util.Comparator#compare(),由 Collections#sort() 等执行。
  • javax.servlet.http.HttpServlet、service() 和所有 doXXX() 方法都采用 HttpServletRequest 和 HttpServletResponse,并且实现者必须处理它们(而不是将它们作为实例变量来获取!)。
  • javax.servlet.Filter#doFilter()

Java 实现的设计模式 https://stackoverflow.com/a/2707195/1697099
带有简单示例的设计模式 https://refactoring.guru/design-patterns
有用的链接https://gitorko.github.io/post/design-patterns https://gitorko.github.io/post/design-patterns

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

具有实时示例的设计模式[关闭] 的相关文章

  • 在 Actionscript 3 中实现单例模式类的最佳方法是什么?

    由于 AS3 不允许私有构造函数 因此构造单例并保证构造函数不是通过 new 显式创建的唯一方法是传递单个参数并检查它 我听说过两个建议 一个是检查调用者并确保它是静态 getInstance 另一个是在同一包命名空间中拥有一个私有 内部类
  • Meyers 的单例实现实际上是如何实现单例的

    我读了很多关于单例的内容 什么时候应该使用它们 什么时候不应该使用它们 以及如何安全地实现它们 我正在用 C 11 编写 并且遇到了 Meyer 的单例延迟初始化实现 如所示这个问题 https stackoverflow com ques
  • 对于 Web 应用程序结构的最佳实践,您有哪些建议? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我在工作中做了很多定制应用程序 我正在尝试为新应用程序定义一些标准 有点像元素 CSS 你如何组织样式表 我是否应该为整个网站提供一个基本样式表
  • 方法链接的优点和缺点以及用对象本身替换所有 void 返回参数的可能性

    我最感兴趣的是Java 但我认为这是一个普遍的问题 最近我一直在使用 Arquillian 框架 ShrinkWrap 使用了大量的方法链 方法链的其他示例是以下方法StringBuilder StringBuffer 使用这种方法有明显的
  • C# 数据库包装设计

    我正在为 C 设计一个数据库包装器 以下是我有两个选择 选项A class DBWrapper IDisposable private SqlConnection sqlConn public DBWrapper sqlConn new S
  • 复制粘贴编码是否可以接受?

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

    对于我当前正在开发的 Web 应用程序 ASP NET MVC 我们采用以下架构 Data Access Layer 将数据持久保存到任意数据库的逻辑 Domain 数据模型 Service Layer 业务逻辑 例如订单处理 账户管理等
  • 您知道 PAC 设计模式的任何示例吗?

    任何人都可以指出正在使用的任何网站或网络应用程序表现 抽象 控制 http www dossier andreas net software architecture pac html设计模式而不是MVC 像这样的桌面应用程序很容易找到 例
  • 用简单的英语来说,什么是单例?

    我已经在谷歌上搜索了大约一个小时 但我仍然不清楚什么是单例 谁能让我更清楚一点 也许可以发布一个代码示例 我所知道的是 一个给定类只能有一个实例 但是你不能为此使用静态类吗 提前致谢 The simple plain English1 ve
  • C++ 包装类的设计

    我必须使用一个界面非常笨拙的旧类 由于我无法更改它并且依赖它 因此我想构建一个包装器 提供一个干净的界面 假设我有课笨手笨脚的班级 基本上 我有三种方法 1 参考会员 Class Wrapper public Wrapper ClumsyC
  • 确定方法调用顺序的接口设计模式

    我想创建一个具有多种方法的 Java 接口 但我希望界面的用户只能按照我定义的顺序或顺序调用方法 例如buyTicket 不应在此之前调用reserveTicket 问 有没有设计模式或任何关于如何做到这一点的提示 我考虑过 A 接口被包装
  • 如何简化 ASP.NET MVC 中的全状态交错模式对话框

    我需要在多对多模式对话框中保留状态渐进增强 http en wikipedia org wiki Progressive enhancementASP NET MVC 项目中的方式 在我的代码中 当禁用 javascript 时 模式对话框
  • NHibernate 中具有不同类型答案的问题

    我正在尝试找到一个问卷问题的简洁解决方案 假设我有一个Questionnaire类有一个集合Answers e g public class Questionnaire public virtual ISet
  • iostream 对象 cin、cout、cerr 和 clog 是如何实现的?

    iostream 对象 cin cout cerr 和 clog 是在 iostream 标头中声明的对象 我知道在某些编译器中可能会在构造这些 iostream 对象之前尝试使用它们 因此在某些情况下它们必须受到 静态初始化顺序失败 的影
  • 单例属性

    好吧 如果我创建一个单例类并通过公共静态属性公开单例对象 我明白了 但我的单例类还有其他属性 这些应该是静态的吗 这些也应该是私人的吗 我只想通过执行以下操作来访问单例类的所有属性 MySingletonClass SingletonPro
  • Java 枚举相对于旧的“类型安全枚举”模式的优势?

    在 JDK1 5 之前的 Java 中 Typesafe Enum 模式是实现只能采用有限数量值的类型的常用方法 public class Suit private final String name public static final
  • 使用面向对象的分析和设计对电梯进行建模[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当涉及到面向对象的设计和分析时 有一组问题似乎在面试和课堂上很常见 这是其中之一 不幸的是 我在大学的 OOP 教授从未真正给出过答案 所以我一
  • 处理大数据二进制文件

    我正在处理包含原始数据的大型二进制文件 每个大约 2 GB 这些文件具有明确定义的结构 其中每个文件都是一个数组events 每个事件都是一个数组data banks Each event and data bank有一个结构 header
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • 为什么工厂模式会这样工作?

    我从未真正研究过工厂模式 今天决定花时间根据本文创建一个快速示例 http msdn microsoft com en us library ee817667 aspx http msdn microsoft com en us libra

随机推荐

  • Angular Bootstrap 在 Angular 13 项目上给出错误

    我正在尝试安装角度引导程序 https ng bootstrap github io home在我的 Angular 13 项目中 如下所示 ng 添加 ng bootstrap ng bootstrap 但是当我在此语句上按 Y 时 我立
  • 如何在 Ektron 中选择属于某个分类的库项目

    我使用的是 Ektron CMS 版本 8 5 SP2 我有一些分类项目 有些是实际页面 有些是库项目 Word 文件和 PDF 等文档 假设我的分类中有 3 个页面和 2 个库项目 总共 5 个项目 我使用以下代码 ContentMana
  • CakePHP 2.0 $this->表单->input()

    这是我的add tcp 表名称 组 表字段 group id group desc PK group id 这是我的控制器 class GroupsController extends AppController public helper
  • 条形图的峰度、偏度? - Python

    在Python中确定条形图的倾斜 峰度的有效方法是什么 考虑到条形图没有分箱 与直方图不同 这个问题没有多大意义 但我想做的是确定图的高度与距离 而不是频率与箱 的对称性 换句话说 给定沿距离 x 测量的高度 y 值 即 y 6 18 10
  • 为什么 roxygen2 不会自动更新描述文件中的“导入”?

    我正在努力密切关注 hadley sbook http r pkgs had co nz 学习编写 R 包的最佳实践 我很高兴读到这些关于哲学 http r pkgs had co nz intro html本书内容 任何可以自动化的事情都
  • 如何在 ExpressionVisitor 中计算表达式?

    我需要在执行表达式之前使用 ExpressionVisitor 来分析它 根据我的需要 我需要评估除法表达式的正确部分 但我不知道该怎么做 这是我的示例代码 internal class RulesChecker ExpressionVis
  • 将 PostgreSQL text/bytea 列迁移到大对象?

    我有一个表 10k 行 用于存储大值text柱子 当前最大的未压缩大小为 417 MB 烘烤后为 85 MB 此设计的缺陷是无法传输这些值 例如通过 JDBC 使用此列的任何内容都必须将整个内容读入内存 是否有任何工具或快捷方式可用于将此列
  • 聚合查询中的 Mongodb java 展开操作抛出异常

    使用嵌入式 mongo 文档时 我尝试展开数组 但收到类似 org springframework data mapping model MappingInstantiationException Failed to instantiate
  • Qt Widgets 全屏边距

    我想创建一个程序 以全屏方式加载谷歌 所以我使用全屏方式打开了我的qt程序w showFullScreen 它工作得很好 但是当我添加QWebView并将其设置为centralWidget像这样 但是当我运行该程序时 我在窗口的两侧得到了一
  • UIWindow addSubview 上的偏移量

    我有一个基于 UITabBar 的应用程序 运行得很好 在某些情况下 我会显示不同的 UIViewController 现在让我烦恼的是我必须调整测试笔尖的框架 并且only测试笔尖 才能正确显示 否则视图位于状态栏下方 void appl
  • 制作一个具有我的应用程序透明背景的全屏绘画程序

    我的目标是制作一个小型 PC Windows 程序 它允许我在屏幕顶部进行绘制 并将结果保存为具有透明背景的 png 格式 像这样的软件Epic Pen https epic pen com or gInk https github com
  • print("\t",end='') 语句中 end='' 的含义? [复制]

    这个问题在这里已经有答案了 这是用于打印嵌套列表中所有值的函数 使用 Python 从 Head First 获取 def printall the list level for x in the list if isinstance x
  • 如何在FragmentActivity上设置工具栏?

    我想设置toolbar关于我的活动延伸片段活动 我知道用于使用setSuppoertActionBar toolbar 我们扩展的方法AppCompatActivity代替FragmentActivity但我重写了onMenuItemSel
  • 模型可以“属于”另外两个模型并具有嵌套关系吗?

    一个模型是否可以属于两个模型并具有嵌套关系 即我想要的 class trainer has many appointments end class appointment belong to trainer customer end cla
  • 如何在 Windows 中向 AD 组添加自定义属性?

    我想知道如何编写这个脚本 另外 是否有一个开箱即用的 GUI 工具可以让我做到这一点 您是指扩展 AD 架构时交换添加的 CustomField 属性吗 如果是这样 那么你可以使用ADSIEdit http technet microsof
  • Symfony2 - 自定义错误页面永远不会显示

    我正在尝试自定义 error html twig error403 html twig error404 html twig 和 error500 html twig 到目前为止 我已尝试获取由 a 引起的 error403 html tw
  • RxJava2 - 同步执行调用

    I ve a TestService 我在其中执行异步任务来获取数据 我想等待回复后再继续 public List
  • 使用 fft 查找每个谐波的相位

    我用的是Matlab 我有一个正弦信号 X 放大器 220 频率 50 我添加了 3 个谐波 x1 gt h2 放大器 30 频率 100 相位 30 x2 gt h4 放大器 10 频率 200 相位 50 x3 gt h6 放大器 05
  • 在C中分配浮点指针[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我目前拥有的是一个简单的函数 它基本上只是根据给定的参数指针重新分配指针 但我收到一条错误消息 说我正在使用未初始化的变量之一 这是我所拥有
  • 具有实时示例的设计模式[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想通过实时示例学习设计模式 那么有人可以建议我可以从哪里开始吗 这些经典的设计模式是每个开发人员都应该了解的 因为它有助于我们与其他