设计模式:Go简单工厂模式

设计模式:Go简单工厂模式

创建型模式

1. 介绍

1.1. 定义

功能类型其他语言的构造函数,一般用于创建Go结构体时,结构体字段初始化。

1.2. 角色

  1. Factory:工厂,负责实现创建产品逻辑。直接被外部调用创建所需产品实例。
  2. IProduct:抽象产品,所有产品功能的抽象。
  3. Product:具体产品,工厂模式创建的目标。

2. 理解

2.1. 应用场景

  • 创建对象比较少。
  • 创建对象具有相同功能方法,具体实现可以不同。

2.2. 优点

  1. Go语法特殊性,可以禁止用户使用Product{}或new(Product)直接创建产品。
  2. 屏蔽产品创建细节,降低创建产品代码与产品的耦合性。

2.2. 缺点

  1. 不符合开放封闭原则

3. 演示

3.1. IProduct

product_interface.go

package simplefactory

type Computer interface {
	Start()
}

3.2. Product

product.go

package simplefactory

import "fmt"

// MacBookPro
type macBookPro struct {
}

func (m *macBookPro) Start() {
	fmt.Println("MacBookPro start...")
}

//ThinkPad
type thinkPad struct {
}

func (t *thinkPad) Start() {
	fmt.Println("ThinkPad start...")
}

3.3. Factory

factory.go

package simplefactory

type ComputerFactory struct {
}

func (c *ComputerFactory) CreateComputer(name string) Computer {
	var computer Computer = nil
	switch name {
	case "macbookpro":
		computer = &macBookPro{}
	case "thinkpad":
		computer = &thinkPad{}
	}

	return computer
}

3.4. 测试

product_interface.go

package simplefactory

import (
	"testing"
)

func TestComputerFactory_CreateComputer(t *testing.T) {
	factory := new(ComputerFactory)

	mbp := factory.CreateComputer("macbookpro")
	mbp.Start()
	tp := factory.CreateComputer("thinkpad")
	tp.Start()
}

4. 参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值