当前位置: 首页 > 网络应用技术

[GO实施] 23个实践设计模型GOF:建筑商模式

时间:2023-03-07 14:03:19 网络应用技术

  上一篇:[GO实施] 23 GOF的设计模型:单个模式

  简单的分布式应用程序系统(示例代码项目):https://github.com/ruanrunxue/practice-design-pattern-go-implementationation

  在编程中,我们经常遇到一些复杂的对象,包括许多成员属性,甚至嵌套了多个复杂的对象。在这种情况下,创建此复杂对象将变得非常笨拙。对于C ++/Java,最常见的性能是构造函数有一个长参数列表:

  对于GO语言,最常见的性能是多层嵌套实例化:

  上述对象创建方法有两个明显的缺点:(1)对用户不友好,在创建对象时,用户需要知道太多细节;(2)代码可读性差。

  该对象中有许多成员以及创建对象的复杂逻辑,非常适合优化使用构建器模式。

  构建器模式的作用如下:

  1.包装的复杂对象的创建过程使对象用户没有感知复杂的创建逻辑。

  2.您可以按顺序逐步分配成员,或创建嵌套对象,最后完成目标对象的创建。

  3.创建逻辑以重复使用多个对象。

  其中,第一个和第二点相对常用。建筑商模型的实现也主要用于这两个点的示例。

  在简单的分布式应用程序系统(示例代码工程)中,我们定义了服务注册中心,以提供服务注册,注册,更新和发现等功能。要实现这些功能,服务注册中心必须保存服务信息。我们将此信息放在此数据结构上,并定义以下内容:

  如果直接实例化方法应该这样:

  尽管结构性嵌套的层次并不多,从上面提到的直接实例化代码来看,读取用户和代码可读性不佳的确确实存在缺点。例如,用户必须首先实例化和实例化,这实际上揭示给用户。

  在下面,我们介绍了构建器模式以优化代码:

  有6个关键点可以实现构建器模式:

  然后,使用构建器模式实例化逻辑是:

  当使用构建器模式创建对象时,用户不再需要了解对象的特定实现详细信息(以下是在预先访问和对象中反映的),并且代码可读性和简单性更好。

  进一步考虑,实际上,前面提到的实施方法,有2个要提高点:

  对于这两个点,我们可以通过功能选项模式进行优化。功能选项模式也用于构建对象。在这里,我们还将其视为构建器模式的扩展。它使用go语言功能的特征作为第一个阶级公民的特征,结合了函数的可变参数,以优化优化上述两个改进点的目的。

  使用功能选项模式的使用是:

  实施功能选项模式有5个关键点:

  功能选项模式的实例化逻辑是:

  与传统的构建器模型相比,功能选项模式的使用显然更简单,更简洁,并且更“ go style”。

  在上一篇文章中,无论是传统的构建器模型还是功能选项模式,我们都没有有限属性的建设性顺序,例如:

  但是,在某些特定情况下,对象的属性必须具有一定的建设性顺序。如果该订单违反了订单,则可能导致一些隐藏的错误。

  当然,我们可以与用户同意属性构造的顺序,但是该协议是不可靠的,您很难确保用户始终遵守协议。因此,更好的方法应该是解决问题。通过界面设计的问题。流利的API模式诞生了。

  下面,我们使用流利的API模式进行实施:

  有6个关键点可以实现流利的API模式。他们中的大多数类似于传统的建筑商模式:

  使用流利的API与传统构建者相似,但是它限制了方法的顺序。如果订单是错误的,则在编译期间报告错误,以便可以预先将问题暴露于编译器,该编译器减少了不必要的错误。

  构建器模式主要用于实例化复杂对象的情况。是很常见:

  1.将复杂的建筑逻辑与业务逻辑分开,并遵循单一责任的原则。

  2.复杂对象的构造过程可以分为多个步骤,增强了代码的可读性,并可以控制属性构造的顺序。

  3.对于采用各种构造方法的场景,建造者可以设计为增强可扩展性的接口。

  4.在GO语言中,使用功能选项模式可以更简洁,优雅,以完成复杂对象的构造。

  1.传统的构建器模式需要添加一个新的构建器对象来完成对象的结构。在流利的API模式下,需要添加多个流利的接口,这使得代码在一定程度上更加复杂。

  抽象的工厂模型类似于构建器模型。两者都用于构建复杂的对象,但前者专注于建立对象/产品系列。后者重点关注对象的步骤构造过程。

  参考[1] [GO实施] 23设计模式GOF:固定原理,Yuan Yizi

  [2]设计模式,第3章。创建模式,GOF

  [3]进行编程模式:功能选项,酷壳酷壳

  [4]流利的API:实践和理论,Ori Roth

  [5] Xorm Builder,Xorm

  [6]发电机模式,RepactoringGuru.cn

  有关更多文章,请注意微信公共帐户:Yuan Yizi的邀请