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语言知识信息等)
相关推荐
小科的奋斗 2020-11-16
wfs 2020-10-29
哈嘿Blog 2020-10-26
bearhoopIT之道 2020-11-11
文山羊 2020-11-07
jaminliu0 2020-10-25
railssky 2020-10-25
小科的奋斗 2020-10-24
HELLOBOY 2020-10-23
牧 2020-10-22
狼窝 2020-10-22
ciqingloveless 2020-10-15
专注前端开发 2020-10-12
哈嘿Blog 2020-09-08
linmufeng 2020-09-08
qidiantianxia 2020-09-15
哈嘿Blog 2020-08-16