Golang设计模式之生成器模式讲解和代码示例

2023-12-05 0 480
目录
  • Go生成器模式讲解和代码示例
    • 概念示例
      • iBuilder.go: 生成器接口
      • normalBuilder.go:具体生成器
      • iglooBuilder.go:具体生成器
      • house.go:产品
      • director.go:主管
      • main.go:客户端代码
      • output.txt:执行结果

Go生成器模式讲解和代码示例

概念示例

当所需产品较为复杂且需要多个步骤才能完成时, 也可以使用生成器模式。 在这种情况下, 使用多个构造方法比仅仅使用一个复杂可怕的构造函数更简单。 分为多个步骤进行构建的潜在问题是, 构建不完整的和不稳定的产品可能会被暴露给客户端。 生成器模式能够在产品完成构建之前使其处于私密状态。

在下方的代码中, 我们可以看到 igloo­Builder冰屋生成器与 normal­Builder普通房屋生成器可建造不同类型房屋, 即 igloo冰屋和 normal­House普通房屋 。 每种房屋类型的建造步骤都是相同的。 主管 (可选) 结构体可对建造过程进行组织。

iBuilder.go: 生成器接口

package main
type IBuilder interface {
setWindowType()
setDoorType()
setNumFloor()
getHouse() House
}
func getBuilder(builderType string) IBuilder {
if builderType == \”normal\” {
return newNormalBuilder()
}
if builderType == \”igloo\” {
return newIglooBuilder()
}
return nil
}

normalBuilder.go:具体生成器

package main
type NormalBuilder struct {
windowType string
doorType string
floor int
}
func newNormalBuilder() *NormalBuilder {
return &NormalBuilder{}
}
func (b *NormalBuilder) setWindowType() {
b.windowType = \”Wooden Window\”
}
func (b *NormalBuilder) setDoorType() {
b.doorType = \”Wooden Door\”
}
func (b *NormalBuilder) setNumFloor() {
b.floor = 2
}
func (b *NormalBuilder) getHouse() House {
return House{
doorType: b.doorType,
windowType: b.windowType,
floor: b.floor,
}
}

iglooBuilder.go:具体生成器

package main
type IglooBuilder struct {
windowType string
doorType string
floor int
}
func newIglooBuilder() *IglooBuilder {
return &IglooBuilder{}
}
func (b *IglooBuilder) setWindowType() {
b.windowType = \”Snow Window\”
}
func (b *IglooBuilder) setDoorType() {
b.doorType = \”Snow Door\”
}
func (b *IglooBuilder) setNumFloor() {
b.floor = 1
}
func (b *IglooBuilder) getHouse() House {
return House{
doorType: b.doorType,
windowType: b.windowType,
floor: b.floor,
}
}

house.go:产品

package main
type House struct {
windowType string
doorType string
floor int
}

director.go:主管

package main
type Director struct {
builder IBuilder
}
func newDirector(b IBuilder) *Director {
return &Director{
builder: b,
}
}
func (d *Director) setBuilder(b IBuilder) {
d.builder = b
}
func (d *Director) buildHouse() House {
d.builder.setDoorType()
d.builder.setWindowType()
d.builder.setNumFloor()
return d.builder.getHouse()
}

main.go:客户端代码

package main
import \”fmt\”
func main() {
normalBuilder := getBuilder(\”normal\”)
iglooBuilder := getBuilder(\”igloo\”)
director := newDirector(normalBuilder)
normalHouse := director.buildHouse()
fmt.Printf(\”Normal House Door Type: %s\\n\”, normalHouse.doorType)
fmt.Printf(\”Normal House Window Type: %s\\n\”, normalHouse.windowType)
fmt.Printf(\”Normal House Num Floor: %d\\n\”, normalHouse.floor)
director.setBuilder(iglooBuilder)
iglooHouse := director.buildHouse()
fmt.Printf(\”\\nIgloo House Door Type: %s\\n\”, iglooHouse.doorType)
fmt.Printf(\”Igloo House Window Type: %s\\n\”, iglooHouse.windowType)
fmt.Printf(\”Igloo House Num Floor: %d\\n\”, iglooHouse.floor)
}

output.txt:执行结果

Normal House Door Type: Wooden DoorNormal House Window Type: Wooden WindowNormal House Num Floor: 2

Igloo House Door Type: Snow DoorIgloo House Window Type: Snow WindowIgloo House Num Floor: 1

以上就是Golang设计模式之生成器模式讲解和代码示例的详细内容,更多关于Golang 生成器模式的资料请关注悠久资源网其它相关文章!

您可能感兴趣的文章:

  • Golang设计模式之适配器模式介绍和代码示例
  • Golang设计模式中抽象工厂模式详细讲解
  • Golang设计模式之适配器模式详细讲解
  • Golang设计模式中的桥接模式详细讲解
  • Golang设计模式工厂模式实战写法示例详解
  • golang实现简单工厂、方法工厂、抽象工厂三种设计模式

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Golang Golang设计模式之生成器模式讲解和代码示例 https://www.u-9.cn/jiaoben/golang/101766.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务