Java 设计模式专题,共 23 种设计模式。摒弃应用并非本末倒置,知其然而知其所以然,
如果是,我相信这里很适合你阅读学习。设计模式学了不会用?可以看两篇试一试,同样的知识,不一样的“味道”。
“每一篇…”(突然被打断)
“don’t talk, show me see see”
“好的大哥,这就安排!”
每一篇都有对应的文章配合源码学习,文章以通俗为主,易懂为辅。学渣的心情学习学霸的知识,我不善搞深奥的东西,但喜欢将深奥的东西变成简单的东西,我深信复杂度守恒定律,我也相信讲出来的东西是为了让大家能听懂而不是自己秀知识储备而已。听懂掌声。
当我们要学习一门技术或者一类知识的时候,先去了解学习它的背景,会对我们接下来的学习和理解产生一些潜移默化的影响和帮助
这个背景千篇一律,事实就是如此。我用自己的话在总结一下。
1977 年被美国的建筑大师? 克里斯托夫·亚历山大 (Christopher Alexander)在他的著作?《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了一系列的解决方案, 至此称为模式。
2年后,1979年,克里斯托夫·亚历山大 在他的另一本著作?《建筑的永恒之道》(The Timeless Way of Building)进一步强化了设计模式的思想。
直到 1990 年,也就是 13 年后。设计模式一词才到了软件工程界,同时为此开辟了专题研讨会。
在“设计模式”进入软件行业后的第5年,也就是 1995 年,艾瑞克·伽马(ErichGamma)??、理査德·海尔姆(Richard Helm)?、拉尔夫·约翰森(Ralph Johnson)?、约翰·威利斯迪斯(John Vlissides)?等 4 位作者合作出版了?《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书。
从此掀起了软件工程界的“设计模式”浪潮,使越来越多的开发者受益,同时涌现出了越来越多的设计模式。而这 4 位作者在软件领域小组名称 Gang of Four 四人组(四人帮),后来设计模式也以此匿名著称 GOF。

现如今的设计模式可远不止笔者这里收录整理学习的 23 种,而要比这多太多太多,但这么多的设计模式希望做的事情确实相同的。都是为了能够被反复利用,解决不断重复出现的问题而存在的,就像当初 GOF 写的那本书一样,‘可复用面向对象的基础’。
一种方法,解决n种问题。这就是模式,它要解决的,就是拥有共性的问题。
基本原则摘自 http://c.biancheng.net/design_pattern/
当问题的解决方案有很多时,该怎么权衡哪一个方案可以成为是模式呢?这就有了原则性的约束。为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,我们应当要尽量根据 ⑦ 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。
对于原则的定义和约束,在多个设计模式中会有具体体现及说明。
摘自 GOF 设计模式一书中文版译文,可能有内容有出入,还请参考原著辅助阅读。
根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。
每种类型在对应部分中会再进行着重说明
在通过表格的形式帮助理解学习和记忆
类型 | 模式 | 类型 | 模式 | 类型 | 模式 |
|---|---|---|---|---|---|
创建型(5) | 单例 | 结构型(7) | 代理 | 行为型(11) | 模板方法 |
原型 | 适配器 | 策略 | |||
建造者 | 桥接 | 命令 | |||
工厂 | 装饰 | 职责链 | |||
抽象工厂 | 外观/门面 | 状态 | |||
享元 | 观察者 | ||||
组合 | 中介者 | ||||
迭代器 | |||||
访问者 | |||||
备忘录 | |||||
解释器 |
按照作用来划分
范围\目的 | 创建型模式 | 结构型模式 | 行为型模式 |
|---|---|---|---|
类模式 | 工厂方法 | (类)适配器 | 模板方法解释器 |
对象模式 | 单例原型建造抽象工厂 | (对象)适配器外观装饰桥接代理享元组合 | 状态命令责任链策略观察者中介者访问者备忘录迭代器 |
以上我们已经对设计模式有一个比较全面的简单了解了. 那么现在,开始吧!
以下分类中可点击的模式为已完成部分,其他未完成部分正在努力“生产”
该设计模式专题将用以记录笔者技术生涯的一次沉淀过程,一共会分为 23 篇文章以及对应的源码内容,文中内容和源码均为自我理解学习沉淀分享,目的与各位一起学习,一起完成心中的梦想。
笔者技术水平、理解能力均有限,如有读者发现有歧义甚至错误的地方,希望可以通过评论或私信或邮箱等等让我知道的途径提醒笔者改正。记得点个 star ⭐ 哦 ヾ(≧▽≦*)o https://github.com/lvgocc/java-design-patterns