设计模式-建造者模式(Go语言描述)
在上一篇博客设计模式-装饰者模式中我们介绍了如何在golang中实现装饰者模式,今天我们接着上篇博客继续设计模式系列文章,今天还是来看一个简单的设计模式-建造者模式。 介绍相信做过android的同学对建造者模式还是比较熟悉的, 一定用过开源的图片加载框架ImageLoader吧, 在ImageLoader的配置中我们就使用了建造者模式, 那什么是建造者模式呢?来看一下定义:
建造者模式中有一下几个角色需要我们熟悉:
在来看看创建模式的结构图: 好了,了解了什么是建造者以及建造者中涉及的几个角色,下面我们就来用代码实现一下建造者模式,根据上面提到的几个角色,我们依依用代码来实现它。 今天我们用一个游戏中的角色创建的事例来展示代码,我们这个游戏角色很简单,仅仅包含名称和使用的武器两个字段。 创建复杂对象首先我们来创建具体的游戏人物类 type Character struct {
Name string
Arms string
}
func (p *Character) SetName(name string) {
p.Name = name
}
func (p *Character) SetArms(arms string) {
p.Arms = arms
}
func (p Character) GetName() string {
return p.Name
}
func (p Character) GetArms() string {
return p.Arms
}
这个类很简单,除了包含我们上面提到了名称和使用的武器两个字段外,剩下的代码仅仅是为这两个字段提供getter和setter方法了,这里不多说了,下面我们就根据这个类来创建一个建造者接口。 实现抽象建造者接口type Builder interface {
SetName(name string) Builder
SetArms(arms string) Builder
Build() *Character
}
前两个方法是我们根据游戏人物类设计出来的,最后一个 创建具体的创建者类下面我们就来根据上面定义的接口来实现一个具体的创建者类, type CharacterBuilder struct {
character *Character
}
func (p *CharacterBuilder) SetName(name string) Builder {
if p.character == nil {
p.character = &Character{}
}
p.character.SetName(name)
return p
}
func (p *CharacterBuilder) SetArms(arms string) Builder {
if p.character == nil {
p.character = &Character{}
}
p.character.SetArms(arms)
return p
}
func (p *CharacterBuilder) Build() *Character {
return p.character
}
这个结构体实现了上面定义的接口 Director的实现上面说过, type Director struct {
builder Builder
}
func (p Director) Create(name string,arms string) *Character {
return p.builder.SetName(name).SetArms(arms).Build()
}
他需要一个 func main() {
var builder Builder = &CharacterBuilder {}
var director *Director = &Director {builder: builder}
var character *Character = director.Create("loader","AK47")
fmt.Println(character.GetName() + "," + character.GetArms())
}
首先我们创建了一个 代码放github上了,欢迎star: https://github.com/qibin0506/go-designpattern (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |