第2篇-"设计模式概述"视频教学版
https://www.bilibili.com/video/BV1P24y1o7t9
《Easy搞定Golang设计模式》合集目录:
https://www.jianshu.com/nb/53250177
如果把修习软件开发当做武功修炼的话,那么可以分为招式和内功。
招式:
- Java、C#、C++、Golang、Rust等编程语言;
- Eclipse、Visual Studio、Goland、Vim等开发工具;
- Struts、Hibernate、JBPM、Gin、Istio、gRPC等框架技术;
- 数据结构
- 算法
- 设计模式
- 架构设计
- 软件工程
注意:招式可以很快学会,但是内功的修炼需要更长的时间
1.1 设计模式从何而来
图1 模式之父
上图是“模式之父”,Christopher Alexander(克里斯托弗.亚历山大)———哈佛大学建筑学博士、美国加州大学伯克利分校建筑学教授、加州大学伯克利分校环境结构研究所所长、美国艺术和科学院院士。
克里斯托弗.亚历山大在作品《建筑的永恒之道》中对“模式”的描述是:
“每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。”
他给出了设计模式的定义。
我们也可以用下面这句话来理解“设计模式”的定义:
“设计模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。”
1.2 软件设计模式又从何而来
图2 四人组(Gang of Four),简称GoF
左到右依次是:Ralph Johnson,Richard Helm,Erich Gamma,John Vlissides。
GoF将模式的概念引入软件工程领域,这标志着软件模式的诞生。软件模式(Software Patterns)是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。
软件模式与具体的应用领域无关,也就是说无论你从事的是移动应用开发、桌面应用开发、Web应用开发还是嵌入式软件的开发,都可以使用软件模式。无论你是使用Java、C#、Objective-C、VB.net、Smalltalk等纯面向对象编程语言,还是使用C++、PHP、Delphi、JavaScript等可支持面向对象编程的语言,你都需要了解软件设计模式! GoF给软件设计模式提供了定义,如下:
“软件设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。”
一句大白话可以总结:“在一定环境下,用固定套路解决问题。”
1.3 软件设计模式的种类
GoF提出的设计模式有23个,包括:
(1)创建型(Creational)模式:如何创建对象;
(2)结构型(Structural )模式:如何实现类或对象的组合;
(3)行为型(Behavioral)模式:类或对象怎样交互以及怎样分配职责。
有一个“简单工厂模式”不属于GoF 23种设计模式,但大部分的设计模式书籍都会对它进行专门的介绍。
设计模式目前种类:GoF的23种 + “简单工厂模式” = 24种
。
1.4 软件设计模式的作用
那么对于初学者来说,学习设计模式将有助于更加深入地理解面向对象思想, 让你知道:
1. 如何将代码分散在几个不同的类中?
2. 为什么要有“接口”?
3. 何谓针对抽象编程?
4. 何时不应该使用继承?
5. 如果不修改源代码增加新功能?
6. 更好地阅读和理解现有类库与其他系统中的源代码。
学习设计模式会让你早点脱离面向对象编程的“菜鸟期”。
1.5 如何学好设计模式
设计模式的基础是:多态
。
初学者:积累案例,不要盲目的背类图。
初级开发人员:多思考,多梳理,归纳总结,尊重事物的认知规律,注意临界点的突破,不要浮躁。
中级开发人员:合适的开发环境,寻找合适的设计模式来解决问题。
多应用,对经典则组合设计模式的大量,自由的运用。要不断的追求。
1.6 设计模式总览表
https://www.yuque.com/aceld/lfhu8y/pebesh?inner=qSWMX