教程设计模式-OOP的力量(第1部分)

先决条件—本博客系列需要具有面向对象编程的中级专业知识。 您应该具有有关类,对象,构造函数,继承,值和引用类型的基本知识。 通过从头到尾阅读本系列文章,中级者将获得知识,专家将增强其知识。

设计模式用于表示经验丰富的面向对象的软件开发人员社区所采用的最佳实践。

生成器设计模式可帮助我们以更简单易读的方式构建对象。 生成器设计模式遵循以下两个简单规则。

  1. 分开原始的类表示形式及其构造方法。
  2. 在最后一步返回类的实例

问题:

考虑一下类,说Person具有十个或更多属性,当您需要创建Person类的实例时,对它的构造函数进行设计。 它的构造函数将使用十个或更多的参数,很难将多个参数作为单个函数或构造函数进行管理,最终,您将失去代码的可读性。 查看以下示例。

尝试在操场上运行上面的示例,它将成功运行,并为您提供预期的输出。 从逻辑上讲这是正确的。

我们可以通过克服以下几点来改进上面的示例。

  1. 我们必须以提到的顺序传递值,不能重新排列参数序列以提高可读性。
  2. 即使在对象创建时不知道某些值,我们也必须传递所有值。

例如,假设您需要创建一个Person类的对象,但是此人仍在寻找工作。 当该人加入任何公司时,只有我们会提供作品详细信息。

解:

  1. 创建相关属性的逻辑组。
  2. 为不同的属性组创建单独的构建器类。
  3. 在最后一步中检索实例。

让我们用一个例子简化一下,
在示例WithoutDesignPatternExample1.swift中,我们已经有一个名为Person的类,其中有14个属性。 如果我们仔细检查所有14个属性,则这些属性具有4个逻辑组。

  1. 个人详细信息属性
  2. 联系人详细信息属性
  3. 地址详细信息属性
  4. 公司详细信息属性

多面设计和流畅设计模式共同帮助我们克服了上述两个问题。

在上面的示例中,我们将Person类的职责划分为不同的类。 现在, Person类仅包含数据属性,而我们创建了多个构建器类,它们负责构建/更新相对的属性组。

我们有一个基本的构建器类PersonBuilder ,还有四个派生的构建器类,分别为PersonPersonalDetailsBuilderPersonContactDetailsBuilderPersonAddressDetailsBuilderPersonCompanyDetailsBuilder

基类PersonBuilder帮助我们随时在多个构建器之间切换,而派生自PersonBuilder的其他四个构建器负责更新相对属性。

在上面的示例中,我们可以清楚地看到,与第一个示例WithoutDesignPatternExample1.swift相比, Person对象的构造更具可读性,而且我们可以随时以更易读的方式更新属性组或任何单个属性。

在上面的示例中,请注意,在调用每个属性更新方法后,我们将返回生成器实例的自身。 这有助于我们编写同一构建器的多个方法的链接,而不是分别编写多行。 这个概念被称为流畅模式。

好处:

  1. 以更易读的方式轻松初始化具有太多属性的类的对象。
  2. 遵循单一责任原则。
  3. 根据您的方便,以任何顺序初始化对象或更新属性。