golang实现设计模式之简单工厂模式总结-代码、优缺点、适用场景

今天分享另外一种创建型类型的设计模式-简单工厂模式,简单工厂模式简单概括:客户端请求时,通过工厂类的创建接口,传入不同的参数,进而实现返回不同类的实例,可见运用简单工厂模式,是为了获取不同类的实例。

举个例子,有个工厂,生产不同的水果罐头,有代号01的黄桃罐头,代号02的荔枝罐头,代号03的苹果罐头等等,想要哪种罐头,只需要向工厂请求相关代号即可获取对应罐头。

下面详细聊聊简单工厂模式到底是怎样的。

定义

定义一个工厂类,根据传入的参数的值不同,返回不同的实例,所有的实例都由仅有的这个工厂来创建,这样的模式就是简单工厂模式。

特点

被创建的实例具有共同的父类或接口,但是实现类数量多了后,违反开闭原则。

结构

  • 1.一个用于创建实例的工厂类
  • 2.一个接口,所有被创建的实例都要实现该接口

适用场景

  • 1.需要创建的对象比较少。仅创建几个类问题不大,如果数量扩展到数百个,意味着写一堆if else,代码臃肿。
  • 2.客户端不关心对象的创建过程。不用了解细节,在需要的地方传入不同参数调用就好了。

优缺点

  • 优点

1.可以对创建的对象进行“加工”,对客户端隐藏相关细节。只关注结果,无需了解过程。

2.通过该模式 , 实现了对 创建实例使用实例的责任分割

  • 缺点

1.若创建逻辑复杂或创建对象过多,则会造成代码臃肿。

2.新增、删除子类均会违反开闭原则。

3.简单工厂模式的工厂类单一,负责所有产品的创建,职责过重,一旦异常,整个系统将受影响。且工厂类代码会非常臃肿,违背高内聚原则。

代码实现

代码结构:

  • 1.创建动物接口,声明say方法。
  • 2.创建具体动物类,实现接口。
  • 3.创建工厂类,提供创建不同动物实例的方法作为外部接口。
  • 4.客户端通过工厂类的方法,传入不同参数获取不同动物的实例。
package main
import "fmt"
// 1.define product interface
type animal interface {
say() string
}
// 2.define concrete product struct
type dog struct{}
func (r *dog) say() string {
return "dog say: 汪汪汪"
}
type cat struct{}
func (r cat) say() string {
return "cat say: 喵喵喵"
}
// 3.create simple factory struct
type simpleFactory struct {
}
type animalTyp int
const (
dogTyp animalTyp = iota
catTyp
)
// create instance, seperate creating and using
func (s *simpleFactory) CreateAnimal(typ animalTyp) animal {
switch typ {
case dogTyp:
return &dog{}
case catTyp:
return &cat{}
default:
return &dog{}
}
}
func main() {
factory := simpleFactory{}
d := factory.CreateAnimal(dogTyp)
fmt.Println(d.say())
c := factory.CreateAnimal(catTyp)
fmt.Println(c.say())
}

posted on   进击的davis  阅读(141)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示