写点什么

成为 AI 时代的代码设计师:分享全网最全的 Go 设计模式仓库

作者:孔令飞
  • 2025-03-02
    广东
  • 本文字数:2785 字

    阅读完需:约 9 分钟

成为 AI 时代的代码设计师:分享全网最全的 Go 设计模式仓库

欢迎关注我的训练营:云原生 AI 实战营,一个助力 Go 开发者在 AI 时代建立技术竞争力的实战营。实战营中包含大量 Go、云原生、AI Infra 相关的优质实战课程和项目。


在 Go 项目开发中,我们经常会遇到各种各样的编码场景,这些场景往往重复发生,因此具有典型性。针对这些典型场景,我们可以自己编码解决,也可以采取更为省时省力的方式:直接采用设计模式。


软件开发领域,早已为常见的开发场景设计好了解决方法,也即设计模式,掌握好这些设计模式,可以提高我们的代码开发效率,并且提高我们的代码质量。所以,作为开发者,学习这些设计模式也是你生涯的必修课。


在 AI 时代,开发工程师能力上移,从一个代码编写者,变成一个代码设计者,掌握好设计模式,就变得更加重要。所以,Go 开发工程师,一定要认真学习设计模式。在找工作面试的过程中,设计模式也经常会作为重点面试题被面试官问到。

什么是设计模式?

设计模式简单来说,就是将软件开发中常见的、需要重复性解决的编码场景,按最佳实践的方式抽象成一个模型,模型描述的解决方法就是设计模式。使用设计模式,可以使代码更易于理解,保证代码的重用性和可靠性。


设计模式的存在是为了解决软件开发过程中经常遇到的一些设计问题,遵循设计模式有助于开发人员编写出更优雅、高效、易维护的代码。


设计模式不是一种具体的代码实现,而是一种通用的解决问题的思路或模式,可以帮助开发人员更好地组织和设计代码结构,你可以使用不同的语言来实现设计模式。

为什么要学习设计模式?

其实设计模式不是新的东西,在你的日常开发中,你其实都或多或少的用到了设计模式,只是你自己无感知,也不知道这些方法技巧的设计模式学名是什么。例如,在你日常开发中,你经常会使用到 NewXXX 这种方法来创建一个结构体实例,其实 NewXXX,也是一种设计模式,学名就叫 New 模式。


在一些场景下,你会使用 NewXXX 来创建一个结构体实例,而不是使用 &Worker{Name: "test"}这种方式来创建一个结构体实例。为什么呢?是因为使用 NewXXX 来创建结构体实例,可以直白的告诉开发者,要传入哪些参数来创建结构体实例,这些参数一般都是比较重要的参数,可以确保结构体实例中的方法能够正常执行。


最简单的 New 模式,都能带给我们一些开发上的收益。扩展开来,其他设计模式,也会在其所属的场景下带给我们各种类型的场景收益。


另外,设计模式是前人设计好的、针对某种场景的最佳实现思路和方法。如果我们能够根据场景选择相匹配的设计模式,那么我们不仅能够快速开发,实现场景开发需求。而且,我们开发的代码,因为符合了最佳实现方法,所以代码质量也会比较高(更简洁、更稳定、灵活易扩展),这样的代码,以后会提高功能的稳定性以及代码的可维护性。


另外,我们也可以将这些常见的开发场景,使用匹配的设计模式来开发,并且进一步封装为 Go 包,提高代码的复用度,进而提高整体的开发效率。


在我们使用设计模式的过程中,也是在学习和实战这些优秀的开发方法和具体实现,对我们个人的技术提升也会有很大的帮助。

设计模式有哪些?

在软件领域,GoF(四人帮,全拼 Gang of Four)首次系统化提出了 3 大类(创建型模式、结构型模式、行为型模式),共 24 种可复用的经典设计方案,来解决不同场景下的软件设计问题,为可复用软件设计奠定了一定的理论基础。


GoF 提出的设计模式最具代表性,但是行业中,其实还沉淀了很多其他的设计模式。这些设计模式当前并没有一个稍微官方的介绍,设计模式的概念及定义散落在互联网的各个地方。设计模式是解决某个场景的实现方法,随着软件开发技术的不断迭代发展,会有很多新场景、新技术涌现出来,设计模式自然也会越来越多,生态越来越丰富。所以,很难,也不可能给出一个设计模式全集。


onexstack/design-pattern 设计模式仓库,调研了很多设计模式相关的资料,并对这些设计模式进行了统一的收集和说明。以下是 onexstack/design-pattern 收集、整理后的设计模式全集(一共 58 种,未来还会不断丰富、优化仓库中的设计模式):



设计模式类型介绍如下:


  • 创建型模式:创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象,增加已有代码的灵活性和可复用性;

  • 行为型模式:处理对象间的通信和交互,关注对象之间的责任分配和合作;

  • 结构型模式:关注对象组合形成更大的结构,以更好地实现系统的构建和扩展;

  • 同步模式:确保多个线程或进程同步地执行,避免数据竞争和不一致性;

  • 并发模式:处理多个并发任务的方式,管理共享资源和实现任务之间的协作;

  • 消息传递模式:通过消息传递进行对象间的通信和交互,封装消息传递细节;

  • 稳定型模式:关注系统的稳定性和可靠性,确保系统在各种情况下都能正常运行;

  • 分析模式:用于分析和设计系统的模式,帮助理解系统需求和设计复杂系统;

  • 反模式:反映了常见的设计错误和反面教材,帮助开发人员避免常见的陷阱和错误。

如何学习设计模式?

每种设计模式都有自己的定义、使用场景。每篇设计模式介绍文章,也或多或少会介绍这些内容。但是,单看这些文字内容,你其实很难掌握设计模式的真正使用方法。读完之后,笔记本上可能一堆“嗯”,“嗯”之外,你也很难再有更深的理解,更别说学以致用了。


学习设计模式,一定要去照着编码实现一次,至少阅读一遍源码,然后再回过头来品味文中对设计模式的概念介绍、场景介绍。只有这样,你才能理解设计模式的真正用法。


但这还不够,因为设计模式你第一次学习完在会后,很可能会忘记,在实际的工作中,遇到一些匹配的场景,也要试着用设计模式介绍的实现方式、编程方法去开发。通过实战不断的去熟悉、熟练、掌握。最终,你才能彻底掌握设计模式的概念、理解设计模式的适用场景和开发方法。


设计模式学习方法总结如下:


onexstack/design-pattern 设计模式开源仓库介绍

设计模式有很多,网上也有很多文章来介绍这些设计模式,但这些文章一般会有以下问题:


  • 设计模式不全:行业中的设计模式有很多,网上的大部分文章,介绍的设计模式并不全,这导致,我们很难通过一套课程或者一篇文章,系统、全面的学习常用的设计模式;

  • 设计模式介绍简陋:网上很多有关设计模式的文章,在介绍设计模式时,介绍的相对简单,不全面,导致我们看完文章,其实很难掌握所讲的设计模式;

  • 缺乏代码示例:要想学习好设计模式,就一定要编码实战,遗憾的是,网上有不少文章,缺乏 Go 版本的实现源码,导致我们空看概念,很难理解和掌握设计模式。


onexstack/design-pattern 开源仓库的出现就是为了解决上述问题。onexstack/design-pattern 仓库全面的介绍行业中的设计模式,并且针对每一个设计模式给出 Go 语言代码实现,帮助你理解设计模式。


另外,onexstack/design-pattern 是一个动态仓库,也就说,onexstack/design-pattern 源码会长期维护,不断完善现有内容,并且补充新的设计模式。努力使你只通过 onexstack/design-pattern,即可全面的掌握设计模式及 Go 语言实现方法。


用户头像

孔令飞

关注

还未添加个人签名 2018-06-29 加入

还未添加个人简介

评论

发布
暂无评论
成为 AI 时代的代码设计师:分享全网最全的 Go 设计模式仓库_Go_孔令飞_InfoQ写作社区