Golang设计模式之工厂模式

ShawnLee_123 · · 641 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

工厂模式

GitHub代码链接](https://github.com/lee820/design-pattern-go)

1. 什么是工厂模式

Factory Pattern,属于创建型模式,它不会对用户暴露创建的逻辑。而是使用一个共同的接口来指向新创建的对象。

2. 工厂模式解决了什么问题

解决了接口的选择问题,我们现在只需要知道要获取的类名称,然后从工厂中直接获取就可以。在生成复杂对象时,可以使用工厂模式,这样用户就不必理解复杂对象的创建过程,只需要获取对象,并使用即可。

2.1 工厂模式优点

  • 简化获取对象流程,当我们想要获取一个对象时,只需要知道对象的名称,直接从工厂中获取就行。
  • 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以了。
  • 屏蔽了产品的具体实现,调用者只关心接口就行。

2.2 工厂模式缺点

  • 每增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中的类增加,在一定程度上增加了系统的复杂度。

3. 工厂模式的实现

3.1 创建一个模型接口

这个接口有一个Draw方法,所有的模型类都会实现这一个方法。

//Shape 模型接口
type Shape interface {
    Draw()
}

3.2 创建三个模型类

这三个模型类实现了Shape的接口,我们用一个工厂,将其创建过程封装在工厂中。

//Circle 圆形类
type Circle struct{}

//Square 正方形类
type Square struct{}

//Rectangle 矩形类
type Rectangle struct{}

圆形类的方法实现:

//NewCircle 实例化Circle类
func NewCircle() *Circle {
    return &Circle{}
}

//Draw Circle实现Shape接口的Draw方法
func (c *Circle) Draw() {
    fmt.Println("Circle Draw() method.")
}

3.3 创建模型工厂

//ShapeFactory 模型工厂类
type ShapeFactory struct{}

//NewShapeFactory 实例化模型工厂
func NewShapeFactory() *ShapeFactory {
    return &ShapeFactory{}
}

//GetShape 从模型工厂获取指定的模型类
func (sf *ShapeFactory) GetShape(shapeType string) Shape {
    switch shapeType {
    case "circle":
        return NewCircle()
    case "square":
        return NewSquare()
    case "rectangle":
        return NewRectangle()
    default:
        return nil
    }
}

在模型工厂中GetShape(shapeType string) Shape函数可以通过模型的名称,获取具体的模型类。因为所有的模型类都实现了Shape接口的Draw方法,所以他们都可以作为Shape类型来赋值。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:ShawnLee_123

查看原文:Golang设计模式之工厂模式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

641 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传