设计模式学习(1) 概述

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种

  1. 创建型模式(5)
    • 单例模式
    • 工厂模式
    • 抽象工厂模式
    • 原型模式
    • 建造者模式
  2. 结构型模式(7)
    • 适配器魔兽
    • 桥接模式
    • 装饰模式
    • 组合模式
    • 外观模式
    • 享元模式
    • 代理模式
  3. 行为型模式(11)
    • 模版方法模式
    • 命令模式
    • 访问者模式
    • 迭代器模式
    • 观察者模式
    • 中介者模式
    • 备忘录模式
    • 解释器模式
    • 状态模式
    • 策略模式
    • 责任链模式

整个系列主要参考:

  • 韩顺平 https://www.bilibili.com/video/BV1G4411c7N4/?spm_id_from=333.1387.favlist.content.click&vd_source=877dcbb9f758db167c05820ed707046b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值