GO设计模式——1、简单工厂模式(创建型)

目录

简单工厂模式(Simple Factory Pattern)

简单工厂模式的核心角色

优缺点

代码实现


简单工厂模式(Simple Factory Pattern)

        简单工厂模式又称为静态工厂方法(Static Factory Method)模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式的核心角色

        1、抽象产品(Abstract Product):是简单工厂创建的所有对象的抽象父类/接口,负责描述所有实例的行为。

        2、具体产品(Concrete Product):是简单工厂模式的创建目标。

        3、简单工厂:是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

优缺点

        (1)优点:简单。

        (2)缺点:如果具体产品扩产,就必须修改工厂内部,增加Case,一旦产品过多就会导致简单工厂过于臃肿。

代码实现

package main

import "fmt"

// (抽象产品)Printer 简单工厂要返回的接口类型
type Printer interface {
    Print(name string) string
}

// (具体产品)CnPrinter 是 Printer 接口的实现,它说中文
type CnPrinter struct {
}

func (*CnPrinter) Print(name string) string {
    return fmt.Sprintf("你好,%s", name)
}

// (具体产品)EnPrinter 是 Printer 接口的实现,它说中文
type EnPrinter struct {
}

func (*EnPrinter) Print(name string) string {
    return fmt.Sprintf("Hello,%s", name)
}

// (工厂)
type Factory struct {
}

func (f Factory) NewPrinter(lang string) Printer {
    switch lang {
    case "cn":
       return new(CnPrinter)
    case "en":
       return new(EnPrinter)
    default:
       return new(CnPrinter)
    }
}

func main() {
    // 创建一个工厂类,在应用中可以将这个工厂类实例作为一个全局变量
    factory := new(Factory)
    // 在工厂类中传入不同的参数,获取不同的实例
    ePrinter := factory.NewPrinter("en")
    fmt.Println(ePrinter.Print("Zhang"))

    cPrinter := factory.NewPrinter("cn")
    fmt.Println(cPrinter.Print("张"))
}

相关推荐

  1. GO设计模式——1简单工厂模式创建

    2023-12-10 17:24:02       37 阅读
  2. GO设计模式——3、抽象工厂模式创建

    2023-12-10 17:24:02       37 阅读
  3. GO设计模式——2、工厂方法模式创建

    2023-12-10 17:24:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 17:24:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 17:24:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 17:24:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 17:24:02       18 阅读

热门阅读

  1. 开源软件:JumpServer、DataEase、MeterSphere

    2023-12-10 17:24:02       44 阅读
  2. 【周报2023.12.09】

    2023-12-10 17:24:02       42 阅读
  3. c++ 类和对象-封装意义一

    2023-12-10 17:24:02       38 阅读
  4. 用格里高利公式求给定精度的PI值

    2023-12-10 17:24:02       41 阅读
  5. Vue笔记(一)基础

    2023-12-10 17:24:02       42 阅读
  6. ReactNative如何调用自定义的原生模块

    2023-12-10 17:24:02       45 阅读
  7. python的列表list

    2023-12-10 17:24:02       40 阅读
  8. vue中侦听器

    2023-12-10 17:24:02       38 阅读
  9. Spring中@Contorller和@ResController的区别

    2023-12-10 17:24:02       42 阅读
  10. 微信小程序页面跳转方法

    2023-12-10 17:24:02       36 阅读
  11. (Spring学习07)Spring之启动刷新过程源码解析

    2023-12-10 17:24:02       37 阅读
  12. 新能源电源开发之电压电流参数校准

    2023-12-10 17:24:02       44 阅读
  13. Git 更改remote repo 地址

    2023-12-10 17:24:02       33 阅读