go语言设计模式之建造者模式(程序员必会)

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

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)
}

运行结果:

go语言设计模式之建造者模式(程序员必会)

这个例子很明显,如果我们想要一个瘦的人,只需要调用NewPersonThinBuilder,而不用关心如何把这个瘦子构造出来的,如果想要个胖子也是一样。

至此,我们把所有的创建型设计模式都说完了,我个人觉得,这里面的简单工厂、单例模式和建造者模式是出镜率特别高的。我们最主要的是理解整个模式的流程,无论任何语言,模式都是一样的,这样的软技能对于程序员来说非常重要的。我们一定要活学活用,这样才能在项目中游刃有余。

剩下的设计模式我会慢慢的说给大家,感兴趣的关注一下,如果你是想学习go语言或者是对设计模式或者算法感兴趣亦或是区块链开发工作者,都可以关注一下。(vx公号,csdn:Go语言之美。更多go语言知识信息等)

相关推荐