0.个人感悟
设计模式是前人在软件开发过程中面对共性问题总结出的解决方案。它很容易在日常代码开发(模块代码)中发力,因为我们遇到的问题很容易抽象到共性问题上。学习和使用设计模式,不仅能够让软件呈现4性(重用性 可读性 可扩展性 可靠性),而且感觉是内功心法,尤其是设计原则的学习,对个人编程修养也有很有帮助。
经验建议
- 跟谁学。跟着一个感兴趣的作者,无论是网课还是书籍,不纠结,先一遍看下来再博采众长
- 多练多思考。包括学习时候敲代码,工作时多去尝试。代码可以先写个保底的版本,然后尝试优化
- 可以的话,学完一个模式,去翻翻用到这个模式的框架源码
- 坚持。
00.写在前面
设计模式一直是我工作中经常出现的名词。中间陆陆续续学习过一些模式,在实际编码中也尝试过进行使用,当然有尝过一些甜头,比如常用的单例模式、工厂模式等。但进一步尝试的时候,总有种始终隔着一层的感觉,有时不知道怎么用,有的时候模仿得四不像。反思发现,其实还是基础不牢靠,没有把各个模式面对和要解决的问题场景吃透。最近正好有一些业余时间,把设计模式系统的学习一遍。写博客用来记录和加深印象,也希望自能摸索到编程的更好层次。才疏学浅,欢迎讨论。
1. 软件开发过程遇到的问题和想达到的目标
软件开发已经存在很多年,其中面对很多很多共性问题,也总结出了许多宝贵的经验。这里从技术角度讨论下,软件开发想要达成什么样一个目标。
总结下来为4性:
- 重用性 相同的代码、功能模块不用重复写。 冗余不仅意味着额外的开发工作量,还有维护的工作
- 可读性 软件难免需要换人维护。快速、准确理解代码是维护的前提。 难以理解意味着巨大的成本以及出错概率
- 可扩展(维护)性 我们当然希望添加新功能能够快捷准确。 不易维护的程序,业界有个词最贴切不过了–屎上雕花
- 可靠性(稳定性) 软件难免需要适配变化。添加新功能后,如果能对原来的功能无影像,那最好不过了。 遇到不可靠的程序就像一个背着一个不定时炸弹
2. 实现软件开发4性目标的方法和指导原则
2.1 软件的层次:
面向对象(oo) --> 功能模块(算法 数据结构) --> 框架 --> 架构(集群)
2.2 方法和指导原则
在软件的各个层次都在引入新的理念、技术来实现软件开发的目标,比如最底层引入面向对象设计,架构层次引入微服务等这些都围绕着一个核心指导原则,也是大家常说的六个字 — 高内聚,低耦合
3.设计模式介绍
3.1 概念:
在软件工程中,设计模式(design pattern)是对软件设计汇总普遍存在(反复出现)的各种问题,所提出的解决方案。 --Erich Gamma 1990
3.2 所属软件层次
设计模式可以在功能模块、框架中体现。比如常用的Spring框架中就包括多种设计模式。
3.3 解决的问题
设计模式其实也是解决软件4性问题。详细学习时对这个就会更加深刻。这也就是为什么开篇讨论软件开发过程中遇到问题。
3.4 设计原则设计模式学习(3) 设计模式原则
设计模式原则,是程序员在编程时应当遵循的原则,也是各种设计模式的基础。核心指导原则是高内聚、低耦合。后面章节会学习具体的设计原则。
3.5 UML类图设计模式学习(2) UML类图
Unified modeing language(统一建模语言)是一种用于软件系统分析和设计的语言工具。设计模式经常用到其中的类图。后续章节会做详细总结学习。
3.6 分类
3大类23种
- 创建型模式(5)
- 单例模式
- 工厂模式
- 抽象工厂模式
- 原型模式
- 建造者模式
- 结构型模式(7)
- 适配器魔兽
- 桥接模式
- 装饰模式
- 组合模式
- 外观模式
- 享元模式
- 代理模式
- 行为型模式(11)
- 模版方法模式
- 命令模式
- 访问者模式
- 迭代器模式
- 观察者模式
- 中介者模式
- 备忘录模式
- 解释器模式
- 状态模式
- 策略模式
- 责任链模式
整个系列主要参考:
- 韩顺平 https://www.bilibili.com/video/BV1G4411c7N4/?spm_id_from=333.1387.favlist.content.click&vd_source=877dcbb9f758db167c05820ed707046b

被折叠的 条评论
为什么被折叠?



