一起学习 Go 语言设计模式之设计模式概述

简介: 本文总结了设计模式的概念与分类,并分别展示给读者 3 大类设计模式中包含的不同设计模式,今后将学习每个设计模式,以及他们之间的关系,

设计模式的概念

模式是在特定环境下人们解决某种重复出现问题的一套成功有效的解决方案。


设计模式(Design Pattern)是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题。


设计模式是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结,使用设计模式是为了可以重用代码,让代码更容易被他人理解并且提高代码的可靠性


设计模式与方法或库的使用方式不同,你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码,而是解决特定问题的一般性概念。

设计模式的分类

《设计模式:可复用面向对象软件的基础》一书中讨论了 23 种不同的设计模式,并根据不同的目标将它们分为以下 3 类:

  1. 创建型:即创建对象的方式。涉及隔离对象创建的细节,以使代码不依赖于对象的类型 ,这样在增加新对象类型时就不必做任何修改。增加已有代码对的灵活性和可复用性
  2. 结构型:即如何设计满足特定项目约束的对象,如何将对象和类组装成较大的结构。这类设计主要围绕着这些对象和其他对象间的关联方式,以保证系统的变化不会导致这些关联方式的变化。保证结构的灵活和高效。
  3. 行为性:指处理程序中特定类型操作的对象。这些对象封装了要执行的流程,例如解释某种语言,满足某个条件,在序列中移动(比如通过迭代器),或者实现某种算法。负责对象间的高效沟通和职责委派。


创建型模式

创建型模式(Creational Pattern)关注对象的创建过程,将对象的创建和使用分离,在使用对象时无须关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展。


创建型模式的不同解决方案都是为了解答 3 个问题:


  1. 创建什么(What)
  2. 由谁创建(Who)
  3. 何时创建(When)


GoF 设计模式一书中包含 5 种创建型模式,而我们将学习 6 种创建型模式:


  • 单例模式(Singleton Pattern)
  • 简单工厂模式(Simple Factory Pattern)
  • 工厂方法模式(Factory Method Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 原型模式(Prototype Pattern)
  • 建造者模式(Builder Pattern)


image.png


结构型模式

结构型模式介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。结构型模式有如下 7 种模式:


image.png


行为型模式

行为型模式(Behavioral Pattern)关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责。行为型模式不仅仅关注类和对象本身,还重点关注它们之间的相互作用和职责划分。


一共有如下 11 种模式:


image.png

image.png

总结

本文总结了设计模式的概念与分类,并分别展示给读者 3 大类设计模式中包含的不同设计模式,今后将学习每个设计模式,以及他们之间的关系,敬请期待!

相关文章
|
1月前
|
程序员 Go 云计算
2023年学习Go语言是否值得?探索Go语言的魅力
2023年学习Go语言是否值得?探索Go语言的魅力
|
24天前
|
缓存 NoSQL Go
通过 SingleFlight 模式学习 Go 并发编程
通过 SingleFlight 模式学习 Go 并发编程
|
9天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
1月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
1月前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
1月前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
1月前
|
Go
Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法
Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法
44 12
|
18天前
|
Rust Linux Go
Rust/Go语言学习
Rust/Go语言学习
|
1月前
|
SQL 关系型数据库 MySQL
「Go开源」goose:深入学习数据库版本管理工具
「Go开源」goose:深入学习数据库版本管理工具
「Go开源」goose:深入学习数据库版本管理工具
|
2月前
|
Cloud Native Java Go
为什么要学习Go语言?
GO logo的核心理念,即简单胜于复杂。使用现代斜体无衬线字体与三条简单的运动线相结合,形成一个类似于快速运动的两个轮子的标记,传达速度和效率。字母的圆形暗示了GO地鼠的眼睛,创造了一个熟悉的形状,让标记和吉祥物很好地搭配在一起。
41 4