Java设计模式 - 构建器和单例

时间:2014-04-17 22:00:33

标签: java design-patterns singleton builder

我对编程中的Design Patterns相当新,我正在尝试通过创建食谱和一餐来学习它们。可以有很多食谱,但只有一餐。

使用Builder:

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

使用Singleton:

实例化我的CurrentMeal,其中应包含ArrayList<Recipe>。我也应该可以访问Recipe内的CurrentMeal

虽然我相信我理解Builder,但我不确定我是否理解Singleton。我是否以适当的方式处理这个问题?如果没有,我们将非常感谢任何有关采取措施的建议。提前谢谢。

2 个答案:

答案 0 :(得分:1)

builder模式:

意图:

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

关键点:

  1. Builder pattern builds a complex object using simple objects and using a step by step approach
  2. Builder类逐步构建最终对象。 This builder is independent of other objects
  3. Replacement to Factory method/Abstract Factory in this scenario:从客户端程序传递到可能容易出错的Factory类的参数太多
  4. 与Factory强制发送所有参数
  5. 不同,某些参数可能是可选的

    UML图:

    enter image description here

    <强>生成器:

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

    <强> ConcreteBuilder:

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

    Java中的Builder设计模式指南

    1. Make a static nested class called Builder在类中,其对象将由Builder构建
    2. Builder class will have exactly same set of fields作为原始课程
    3. Builder class will expose method for adding ingredients。每个方法都将返回相同的Builder对象。每次方法调用都会丰富Builder。
    4. Builder.build() method will copy all builder field values into actual class and return object of Item class
    5. 项目类(我们正在为其创建构建器的类)should have private constructor to create its object from build() method and prevent outsider to access its constructor.
    6. 有关详细信息,请参阅此journaldev文章。

      Singleton模式:

      意图:

      1. 确保一个类只有一个实例,并提供一个全局访问点。
      2. 封装&#34;即时初始化&#34;或&#34;首次使用初始化&#34;
      3. 在以下情景中应考虑

        singleton

        1. 无法合理分配单个实例的所有权
        2. 延迟初始化是可取的
        3. 未另行规定全球访问权限

          UML图:

          enter image description here

          有关详细信息,请查看以下SE问题:

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

答案 1 :(得分:0)

Singleton模式允许您共享对象的单个实例。如果你想分享你的CurrentMeal属性,那么你当然可以将它封装在Singleton中,尽管我没有看到这一点。它不是真正的模式设计。例如,您可以使用Singleton来实现日志记录机制。

Builder模式非常适合您的应用程序,因为它允许基于类似的属性构建不同的Recipe实现。