PHP设计模式学习最全总结

专注于PHP、MySQL、Linux和前端开发,感兴趣的感谢点个关注哟!!!文章整理在GitHub,主要包含的技术有PHP、Redis、MySQL、JavaScript、HTML&CSS、Linux、Java、Golang、Linux和工具资源等相关理论知识、面试题和实战内容。

文章归纳

本文将给你分享一款超级实用的设计模式学习网站。在学习设计模式之前,首先我们需要知道为什么学习设计模式?如何有一个正确的、高效的学习设计模式?下图罗列出个人在学习设计模式过程中的一个大致学习思路:
Snipaste_2021-06-03_10-27-36

什么是设计模式

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

设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。 模式并不是一段特定的代码, 而是解决特定问题的一般性概念。 你可以根据模式来实现符合自己程序实际所需的解决方案。

人们常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。 但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。 同一模式在两个不同程序中的实现代码可能会不一样。

算法更像是菜谱: 提供达成目标的明确步骤。 而模式更像是蓝图: 你可以看到最终的结果和模式的功能, 但需要自己确定实现步骤。

设计模式发展历史

谁发明了设计模式? 这是一个很好的问题, 但也有点不太准确。 设计模式并不是晦涩的、 复杂的概念——事实恰恰相反。 模式是面向对象设计中常见问题的典型解决方案。 同样的解决方案在各种项目中得到了反复使用, 所以最终有人给它们起了名字, 并对其进行了详细描述。 这基本上就是模式被发现的历程了。

模式的概念是由克里斯托佛·亚历山大在其著作 《建筑模式语言》 中首次提出的。 本书介绍了城市设计的 “语言”, 而此类 “语言” 的基本单元就是模式。 模式中可能会包含对窗户应该在多高、 一座建筑应该有多少层以及一片街区应该有多大面积的植被等信息的描述。

埃里希·伽玛、 约翰·弗利赛德斯、 拉尔夫·约翰逊和理查德·赫尔姆这四位作者接受了模式的概念。 1994 年, 他们出版了 《设计模式: 可复用面向对象软件的基础》 一书, 将设计模式的概念应用到程序开发领域中。 该书提供了 23 个模式来解决面向对象程序设计中的各种问题, 很快便成为了畅销书。 由于书名太长, 人们将其简称为 “四人组 (Gang of Four, GoF) 的书”, 并且很快进一步简化为 “GoF 的书”。

此后, 人们又发现了几十种面向对象的模式。 ​ “模式方法” 开始在其他程序开发领域中流行起来。 如今, 在面向对象设计领域之外, 人们也提出了许多其他的模式。

设计模式分类

不同设计模式的复杂程度、 细节层次以及在整个系统中的应用范围等方面各不相同。 我喜欢将其类比于道路的建造: 如果你希望让十字路口更加安全, 那么可以安装一些交通信号灯, 或者修建包含行人地下通道在内的多层互通式立交桥。

最基础的、 底层的模式通常被称为惯用技巧。 这类模式一般只能在一种编程语言中使用。

最通用的、 高层的模式是构架模式。 开发者可以在任何编程语言中使用这类模式。 与其他模式不同, 它们可用于整个应用程序的架构设计。

此外, 所有模式可以根据其意图或目的来分类。 本书覆盖了三种主要的模式类别:

  1. 创建型模式提供创建对象的机制, 增加已有代码的灵活性和可复用性。

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

  3. 行为模式负责对象间的高效沟通和职责委派。

通过下图,大致罗列出如下:
Snipaste_2021-06-03_10-37-13

模式实践

上面分享了一些关于设计模式的基础知识。我们也对设计模式的发展史、分类等有了一定的了解,接着就是通过代码实践了。在学习设计模式时,大家会经常遇到一个问题。

  1. 同一种设计模式在A编程语言中能够实现,但是在B编程语言中就不知道如何实现。

  2. 初学者,由于看的书籍或者文章所用的编程语言与自己当前掌握的编程语言不符,导致增加了学习难度。

对于上面的这些问题,在该网站中,统统都帮你一一解决了。网站中有这不同的编程语言示例代码,满足了绝大部分的学习者。

学习方法

在示例代码中,不仅仅介绍了设计模式的定义,还有逻辑图,UML图,实际代码,实用环境。同时最大的亮点是通过真实的生活环境案例,来归纳设计模式,这样帮助理解设计模式。下图就是设计模式示例代码的大致学习思路:
Snipaste_2021-06-03_10-46-10

网站地址

上面大致罗列了一些设计模式的一些基础知识,还有网站设计模式学习的方式方法。网站的具体网址是:refactoringguru.cn/design-patterns

本作品采用《CC 协议》,转载必须注明作者和本文链接
喜欢的,可以关注公众号"卡二条的技术圈"。
本帖由系统于 4个月前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

能搞些实例那就更好

4个月前 评论
奕鹏 (楼主) 4个月前
旦架哨 (作者) 4个月前
旦架哨 (作者) 4个月前

那个图不错。接手了很多 ThinkPHP 框架的项目,都是 if else,没有什么模式,很糟糕,很多那些给别人搞开发的人都是这么搞的吧,写了第一版后,然后要修改,直接在上面 if else 下,最后成了十八级地狱,钱到手了,苦逼的就是我们这些 996 的

你想优化吧,老板在催:这个不用多久吧?好了吗?不想优化吧,自己看得很累。做嘛啊做,三点钟🕒喝杯茶 allright?,上班时间闲着就是要摸鱼或者看设计模式,比如我,这不是在灌水吗?

4个月前 评论
huangxu 4个月前
jiangjun

算法是解决的具体场景下的具体问题,和效率的问题。算法是给计算机服务的,怎么让计算机少工作,效率高。 设计模式是为了写出高扩展,低耦合,易阅读的代码,设计模式是为了给人服务的,计算机不关心用了什么设计模式。

4个月前 评论
奕鹏 (楼主) 4个月前
captain2021 4个月前

先收藏,用不用的到在看

4个月前 评论

好厉害,以前看设计模式都是云里雾里的,看了你这个文章我大概懂了点了。

4个月前 评论
奕鹏 (楼主) 4个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!