如何使用Golang实现简单工厂模式_封装对象创建逻辑


简单工厂模式虽非GoF 23种设计模式之一,但通过接口定义行为、结构体实现具体逻辑、工厂函数统一创建并返回接口实例,实现了对象创建逻辑的封装与解耦。

如何使用golang实现简单工厂模式_封装对象创建逻辑

简单工厂模式不是GoF 23种设计模式之一,但它是一种实用的封装对象创建逻辑的方式。Golang没有类和构造函数,但可以通过函数、结构体和接口自然实现类似效果——核心是把“创建什么类型”的判断逻辑集中到一个工厂函数中,对外隐藏具体类型和初始化细节。

定义统一接口,让不同实现可互换

先定义一个接口,描述所有产品共有的行为。比如做一个日志记录器工厂,支持控制台、文件、网络三种输出方式:

log.go

type Logger interface {
  Log(message string)
}

实现具体类型,各自封装内部逻辑

每个具体日志器实现 Logger 接口,内部处理各自的写入方式:

console_logger.go

标贝AI虚拟主播 标贝AI虚拟主播

一站式虚拟主播视频生产和编辑平台

标贝AI虚拟主播 69 查看详情 标贝AI虚拟主播 type ConsoleLogger struct{}

func (c *ConsoleLogger) Log(message string) {
  fmt.Println("[CONSOLE]", message)
}

file_logger.go

type FileLogger struct {
  filename string
}

func NewFileLogger(filename string) *FileLogger {
  return &FileLogger{filename: filename}
}

func (f *FileLogger) Log(message string) {
  f.writeToFile(message) // 省略具体写入逻辑
}

编写工厂函数,统一管理创建逻辑

工厂函数接收参数(如类型名或配置),返回接口类型实例。调用方不关心具体结构体,只依赖 Logger 接口:

logger_factory.go

type LoggerType string

const (
  ConsoleLoggerType LoggerType = "console"
  FileLoggerType LoggerType = "file"
  NetworkLoggerType LoggerType = "network"
)

func NewLogger(loggerType LoggerType, config map[string]string) Logger {
  switch loggerType {
  case ConsoleLoggerType:
    return &ConsoleLogger{}
  case FileLoggerType:
    return NewFileLogger(config["filename"])
  case NetworkLoggerType:
    return &NetworkLogger{addr: config["addr"]}
  default:
    return &ConsoleLogger{} // 默认兜底
  }
}

使用时只需调用工厂,解耦创建与使用

业务代码不再 new 具体类型,而是通过工厂获取实例,后续扩展新日志器也不影响原有调用:

func main() {
  logger := NewLogger(ConsoleLoggerType, nil)
  logger.Log("Hello from console")

  fileLogger := NewLogger(FileLoggerType, map[string]string{"filename": "app.log"})
  fileLogger.Log("S*ed to file")
}
  • 新增日志器只需实现 Logger 接口 + 在工厂中加 case 分支
  • 调用方无感知变化,无需修改 import 或初始化语句
  • 配置可灵活传入(如 map、struct、option 函数),提升扩展性

以上就是如何使用Golang实现简单工厂模式_封装对象创建逻辑的详细内容,更多请关注其它相关文章!


# golang  # 义乌市网站建设服务器  # 成本最低的网站建设方案  # 店铺最多的网站排名优化  # 顺义优化seo  # 排名网站怎么优化软件  # 高碑店医院网站建设招标  # 禹州seo排名  # 怎么注册作文网站推广  # 修武县网站推广公司地址  # 可以通过  # 相关文章  # 记录器  # 是一种  # 也不  # 不同类型  # 布尔  # 只需  # 如何使用  # 主播  # 简单工厂模式  # switch  # ai  # app  # go  # seo 推广表格 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: msn官方入口2025登录 msn官网2025直达首页入口  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  我的世界官方网址入口 我的世界游戏主页直达入口  《下一站江湖2》心法融合技巧  在VS Code中利用AI辅助进行代码迁移  《腾讯相册管家》注销账号方法  电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法  《画加》约稿流程  荣耀magicv5怎么上手测评  4399造梦西游3无敌版_4399游戏入口  《绝区零》2.3前瞻|直播|内容介绍  VS Code中的Tailwind CSS IntelliSense插件使用技巧  斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  优化2xN网格最大路径和的动态规划算法实践  C++如何实现矩阵乘法_C++二维数组矩阵运算代码示例  邮政快递寄件查询入口 邮政快递收件查询入口  AO3中文版手机快速通道_AO3最新稳定链接更新  《小黑盒》删除历史浏览方法  Win10怎么设置快速启动 Win10开启快速启动设置方法  《新三国志曹操传》游历事件袁尚突围攻略  手机远程连接电脑方法  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  不吃碳水化合物是健康减肥的好办法吗  德邦快递查询入口登录官网 德邦快递单号查询系统入口  Yandex浏览器官方入口_Yandex搜索引擎中文版  极兔快递官网查询入口手机版 手机极兔快递登录查询入口官方  使用 J*aScript 随机化 CSS Grid 布局中的元素顺序  《百果园》充值余额方法  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  《下一站江湖2》独孤剑诀习得方法  c++中的const关键字用法大全_c++ const正确使用指南  Dagster资产间数据传递与用户配置管理教程  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南  偃武诸葛亮阵容搭配推荐  《糖豆》添加舞曲方法  C++如何实现单例模式_C++线程安全的单例模式写法  微信网页版在线登录 微信网页版在线使用入口  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  Golang如何操作指针参数_Go pointer参数传递规则  《华夏千秋》龙女试炼功法获取方法  TikTok视频播放中断怎么办 TikTok播放异常修复方法  风神瞳获取全攻略  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  iPhone 14 Pro如何更改区域设置_iPhone 14 Pro地区语言修改教程  如何自定义苹果手机铃声  如何定制PrimeNG Sidebar的背景颜色  Google Cloud Functions 时区处理指南:理解与最佳实践  Go Goroutine调度与并发执行深度解析 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.