上一篇:[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的邀请