gpt4 book ai didi

Java 设计模式 - Builder 和 Singleton

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:01 26 4
gpt4 key购买 nike

我对编程中的设计模式还很陌生,我正在尝试通过制作食谱和一顿饭来学习它们。可以有很多食谱,但只有一餐。

使用生成器:

创建一个 Recipe ,其中将包含名称、成分等。

使用单例:

实例化我的 CurrentMeal ,其中应包含 ArrayList<Recipe> .我也应该能够访问 Recipe在我的里面CurrentMeal .

虽然我相信我理解Builder ,我不确定我是否理解Singleton一切都很好。我是否以适当的方式处理这个问题?如果没有,我们将不胜感激关于采取的方法的任何建议。提前致谢。

最佳答案

builder图案:

意图:

将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示。

要点:

  1. Builder 模式使用简单的对象并使用逐步的方法构建复杂的对象
  2. Builder 类逐步构建最终对象。 此构建器独立于其他对象
  3. 在这种情况下替换为工厂方法/抽象工厂:从客户端程序传递到工厂类的参数太多,容易出错
  4. 有些参数可能是可选的,不像 Factory 中强制发送所有参数

UML 图:

enter image description here

build 者:

用于创建对象(产品)的抽象接口(interface)。

混凝土 builder :

Builder 提供实现。它是一个能够构造其他对象的对象。构建和组装零件以构建对象

Java 中的构建器设计模式指南

  1. 在其对象将由 Builder 构建的类中创建一个名为 Builder 的静态嵌套类
  2. Builder 类将具有与原始类完全相同的字段集
  3. Builder 类将公开添加成分的方法。每个方法将返回相同的 Builder 对象。每次方法调用都会丰富生成器。
  4. Builder.build() 方法会将所有构建器字段值复制到实际类中并返回 Item 类的对象
  5. Item 类(我们正在为其创建 Builder 的类)应该有私有(private)构造函数以通过 build() 方法创建其对象并防止外部人员访问其构造函数。

引用这个journaldev文章了解更多详情。

Singleton图案:

意图:

  1. 确保一个类只有一个实例,并提供一个全局访问点。
  2. 封装的“即时初始化”或“首次使用时初始化”

singleton在以下情况下应考虑:

  1. 无法合理分配单个实例的所有权
  2. 延迟初始化是可取的
  3. 没有另外提供全局访问权限

UML 图:

enter image description here

有关更多详细信息,请查看下面的 SE 问题:

What is an efficient way to implement a singleton pattern in Java?

关于Java 设计模式 - Builder 和 Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23144203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com