go语言设计模式之建造者模式(程序员必会)
本文主要说一下设计模式之建造者模式,后续会有更多的模式和算法以及区块链相关的,如果你是想学习go语言或者是对设计模式或者算法感兴趣亦或是区块链开发工作者,都可以关注一下。(vx公号,csdn:Go语言之美。更多go语言知识信息等)。

建造者模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。个人理解:你想创建某个对象,只需要调用一个接口,不必关心里面具体如何实现就可以获得想要的实例。

建造者结构图
如上图,我们只需要与Director交互,就可以获取到想要的实例,而不必关系builder里面是如何构造出来的。我们上代码:
package main
import (
"fmt"
)
type PersonBuilder interface {
buildHead()
buildBody()
buildArm()
buildLeg()
display() *PersonBuilding
}
type PersonBuilding struct {
head, body, arm, leg string
}
type PersonThinBuilder struct {
building *PersonBuilding
}
func (this *PersonThinBuilder) buildBody() {
this.building.body = "身体很瘦"
}
func (this *PersonThinBuilder) buildHead() {
this.building.head = "头很小"
}
func (this *PersonThinBuilder) buildArm() {
this.building.arm = "胳膊很瘦"
}
func (this *PersonThinBuilder) buildLeg() {
this.building.leg = "腿很细"
}
func (p *PersonThinBuilder) display() *PersonBuilding {
return p.building
}
func NewPersonThinBuilder() *PersonThinBuilder {
return &PersonThinBuilder{new(PersonBuilding)}
}
type PersonFatBuilder struct {
building *PersonBuilding
}
func (this *PersonFatBuilder) buildBody() {
this.building.body = "身体很胖"
}
func (this *PersonFatBuilder) buildHead() {
this.building.head = "头很大"
}
func (this *PersonFatBuilder) buildArm() {
this.building.arm = "胳膊很胖"
}
func (this *PersonFatBuilder) buildLeg() {
this.building.leg = "腿很粗"
}
func (p *PersonFatBuilder) display() *PersonBuilding {
return p.building
}
func NewPersonFatBuilder() *PersonFatBuilder {
return &PersonFatBuilder{new(PersonBuilding)}
}
type PersonDirector struct {
PersonBuilder
}
func (p *PersonDirector) createPerson() {
p.buildHead()
p.buildBody()
p.buildArm()
p.buildLeg()
}
func (p *PersonDirector) display() *PersonBuilding {
return p.PersonBuilder.display()
}
func main() {
ptb := NewPersonThinBuilder()
pdThin := &PersonDirector{ptb}
pdThin.createPerson()
thinPerson := pdThin.display()
fmt.Println(*thinPerson)
pfb := NewPersonFatBuilder()
pdFat := &PersonDirector{pfb}
pdFat.createPerson()
fatPerson := pdFat.display()
fmt.Println(*fatPerson)
}运行结果:

这个例子很明显,如果我们想要一个瘦的人,只需要调用NewPersonThinBuilder,而不用关心如何把这个瘦子构造出来的,如果想要个胖子也是一样。
至此,我们把所有的创建型设计模式都说完了,我个人觉得,这里面的简单工厂、单例模式和建造者模式是出镜率特别高的。我们最主要的是理解整个模式的流程,无论任何语言,模式都是一样的,这样的软技能对于程序员来说非常重要的。我们一定要活学活用,这样才能在项目中游刃有余。
剩下的设计模式我会慢慢的说给大家,感兴趣的关注一下,如果你是想学习go语言或者是对设计模式或者算法感兴趣亦或是区块链开发工作者,都可以关注一下。(vx公号,csdn:Go语言之美。更多go语言知识信息等)
相关推荐
wfs 2020-10-29
哈嘿Blog 2020-10-26
bearhoopIT之道 2020-11-11
小科的奋斗 2020-10-24
HELLOBOY 2020-10-23
专注前端开发 2020-10-12
哈嘿Blog 2020-09-08
qidiantianxia 2020-09-15
哈嘿Blog 2020-08-16