设计模式-生成器设计模式

本文介绍了生成器设计模式,它如何将类拆分为模块化,用于处理复杂对象的创建,支持多步骤顺序变化和动态表示。通过Director类实现对象的封装和执行特定任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是生成器设计模式

  1. 众所周知我们设计代码的时候要将代码设计出模块化的,一个功能是一个模块,那么生成器设计模式,是将一个类再度进行了一个拆分,让一个类的内部进行了单一职责化,其实我们在平时开发的时候就会不经意的使用到该设计模式。
  2. 相当于在N个相似的生产线上我们通过定义了一个共有的interface,这N个生成线都是以相似的步骤来生成东西。
  3. 该模式有点类似与工厂设计模式,工厂设计模式是用来生成一系列相关的对象,生成器设计模式可以将一个复杂的对象拆分成很多步骤来完成。

使用场景

  1. 复杂对象的创建:当对象的创建过程涉及到多个步骤,并且这些步骤的顺序可能会变化时,生成器模式可以提供一种灵活的方式来创建对象。

  2. 不同的表示:当一个对象可以有多种不同的表示,而且你希望在运行时动态地选择表示时,生成器模式可以提供一种解决方案。

  3. 封装创建过程:当你希望封装对象的创建过程,以便在不暴露对象的内部表示的情况下创建对象时,生成器模式可以提供帮助。

UML图

在这里插入图片描述

代码

package generator

type Generator interface {
	setWindow()
	setDoor()
	setWall()
	setRoof()
}

type GeneratorHouse struct {
}

func NewGeneratorHouse() *GeneratorHouse {
	return &GeneratorHouse{}
}

func (g *GeneratorHouse) setWindow() {
	println("set window for house")
}

func (g *GeneratorHouse) setDoor() {
	println("set door for house")
}

func (g *GeneratorHouse) setWall() {
	println("set wall for house")
}

func (g *GeneratorHouse) setRoof() {
	println("set roof for house")
}
func (g *GeneratorHouse) GetResult() {
	println("set window for highrises")
}

type GeneratorHighRises struct {
}

func (g *GeneratorHighRises) setWindow() {
	println("set window for highrises")
}

func (g *GeneratorHighRises) setDoor() {
	println("set door for highrises")
}

func (g *GeneratorHighRises) setWall() {
	println("set wall for highrises")
}

func (g *GeneratorHighRises) setRoof() {
	println("set roof for highrises")
}

func (g *GeneratorHighRises) GetResult() {
	println("set window for highrises")
}

type Director struct {
}

func (d *Director) Excuter(task string) {
	if task == "house" {
		house := NewGeneratorHouse()
		house.setDoor()
		house.setRoof()
		house.setWall()
		house.setWindow()
		house.GetResult()
	}
	if task == "highrises" {
		highrises := &GeneratorHighRises{}
		highrises.setDoor()
		highrises.setRoof()
		highrises.setWall()
		highrises.setWindow()
		highrises.GetResult()
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值