生成模式

可用

3.1 单例

Singleton是一种通用设计模式,它保证单线程应用程序将具有某个类的单个实例,并提供对该实例的全局访问点。

单例

很多时候,新手程序员喜欢将实用方法组装到一些静态类中——一个只包含静态方法的类。这种方法有很多缺点——例如,您不能传递对此类对象的引用,此类方法难以测试等。

作为替代方案,提出了单例类解决方案:一个只能有一个对象的类。尝试创建此对象时,仅当它不存在时才创建它,否则返回对已存在实例的引用。

重要的是可以使用类的实例,因为在许多情况下可以使用更广泛的功能。例如,这个类可以实现一些接口,它的对象可以作为接口的实现传递给其他方法。一组静态方法无法完成的事情。

优点:

  • 方法绑定到对象,而不是静态类 - 您可以通过引用传递对象。
  • 对象方法更容易测试和模拟。
  • 对象只在需要的时候创建:惰性对象初始化。
  • 如果有很多不需要启动的单曲,则加速程序的初始启动。
  • 单独可以进一步变成一个模板策略或几个这样的对象。

缺点:

  • 控制线程间竞争和延迟变得更加困难。
  • 很难“从头”写一个多线程的“孤独者”:访问一个长期存在的单例,理想情况下,不应该打开互斥量。更好的经过验证的解决方案。
  • 两个线程之间因未完成的单个线程而发生冲突将导致延迟。
  • 如果长时间创建对象,延迟可能会干扰用户或破坏实时性。在这种情况下,最好将其创建转移到程序初始化阶段。
  • 单元测试需要特殊功能 - 例如,将库置于“非孤独”模式并完全隔离彼此的测试。
  • 需要一种特殊的策略来测试完成的程序,因为甚至“最简单的可启动性”的概念也消失了,因为可启动性取决于配置。

3.2 工厂【方法】

工厂方法是一种通用设计模式,它为子类(类继承者)提供一个用于创建特定类实例的接口。在创建时,后代可以确定创建哪个类。

换句话说,这个模板将对象的创建委托给父类的后代。这允许您在程序代码中不使用具体的类,而是在更高层次上操作抽象对象。

工厂方法

此模式定义了一个用于创建对象的接口,但将其留给子类来决定该对象基于哪个类。工厂方法允许类委托子类的创建。在以下情况下使用:

  • 该类事先不知道它需要创建哪些子类的哪些对象。
  • 类的设计使其创建的对象由子类指定。
  • 该类将其职责委托给几个辅助子类之一,并计划确定哪个类接管这些职责。

3.3 抽象工厂

抽象工厂是一种通用设计模式,它提供了一个接口来创建相关或相互依赖的对象系列,而无需指定它们的具体类。

该模式是通过创建一个抽象类Factory来实现的,Factory是创建系统组件的接口(例如,对于一个窗口界面,它可以创建窗口和按钮)。然后编写实现该接口的类。

抽象工厂

它用于程序必须独立于创建的新对象的过程和类型的情况。当有必要创建相关对象的系列或组时,排除在同一上下文中同时使用来自不同组的对象的可能性。

优势:

  • 隔离特定的类;
  • 简化产品系列的更换;
  • 保证产品兼容性。

假设您的程序使用文件系统。然后要在 Linux 中工作,您需要 LinuxFile、LinuxDirectory、LinuxFileSystem 对象。要在 Windwos 中工作,您需要 WindowsFile、WindowsDirectory、WindowsFileSystem 类。

通过 Path.of() 创建的 Path 类就是这种情况。Path 实际上不是一个类,而是一个接口,它有 WindowsPath 和 LinuxPath 实现。将创建什么样的对象对您的代码是隐藏的,将在运行时决定。

3.4 原型

原型是一种生成式设计模式。

该模式定义了使用原型实例创建的对象类型,并通过复制该原型来创建新对象。它允许您摆脱实现并遵循“通过接口编程”的原则。

层次结构顶部的接口/抽象类被指定为返回类型,后代类可以替代实现该类型的继承人。简单地说,这是通过克隆另一个对象而不是通过构造函数创建对象来创建对象的模式。

原型

该模式用于:

  • 避免以标准方式创建对象的额外工作(意味着使用构造函数,因为在这种情况下,整个对象的祖先层次结构的构造函数也将被调用),而这对于应用程序来说是非常昂贵的。
  • 避免像抽象工厂模式那样在客户端应用程序中继承对象创建者。

当您的程序不关心它如何创建、组合和呈现产品时,请使用此设计模式:

  • 实例化的类是在运行时确定的,例如,使用动态加载;
  • 您希望避免构建与产品类层次结构平行的类或工厂层次结构;
  • 类实例可以处于几种不同状态之一。设置适当数量的原型并克隆它们可能更方便,而不是每次都在适当的状态下手动实例化类。
1
任务
模块 3,  第 16 级课程 2
已锁定
Turnkey Universe
task4106
1
任务
模块 3,  第 16 级课程 2
已锁定
Personnel Forge
task4107
1
任务
模块 3,  第 16 级课程 2
已锁定
Personnel Factories
task4108
1
任务
模块 3,  第 16 级课程 2
已锁定
Prototypes
task4109
评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论