a 设计模式 目录

浪了个五一,就发现CSDN在侧边自带博客目录了,再也不用在正文里面t o c显示目录好长好长了XD !
所以下一步我许愿,CSDN出一个markdown的head folder,编辑文章再也不用不停翻页了。

ref

  • GoF的肯定是必读的,不说了。什么大话设计模式啊,Head Fisrt Design Pattern之类的,随手翻了翻…emm感觉还是直接看GOF吧,虽然不一定能把所有精髓都掌握 (太难了) ,但是读懂入门也是没问题的啊
  • newplan推荐的 (以及newplan本人的仓库XD
  • 李建忠设计模式

    前两个都是基于JAVA的,这个是基于C++的(现在市面上用C++写的真的很少…
    代码和slide网上也有,为了不侵权就不share了,有心人自己找下

  • 侯捷的设计模式讲座的slide(从stl源码出发…留着以后再看,新入坑不建议)
  • uml cheatsheet for all

提纲挈领

基础知识

  • 类、接口、类图

在这里插入图片描述

  • 关系
    前两个都有has-a的逻辑,只不过第一个是has-part,第二个是has-whole;
    后两个都有is-a的逻辑

    • 依赖关系(弱耦合
      用你的方法/功能而不是用你,“人”打电话,用到“手机”的拨号功能

    下面那个引出去的虚线是类的实现的意思,跟依赖的那个虚线+箭头没有关联。
    在这里插入图片描述

    • 关联关系(学会辨析 ,尤其二三
      • 普通关联
        单向、双向均有。相互要用到对面的整个对象(而不仅仅某个功能了)。例如,老师和学生的关系图,每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联。

        忽略那个teaches to 会更方便记忆
        在这里插入图片描述

      • 聚合关系(强耦合
        整体与部分(has-a),成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。

        在这里插入图片描述

        • 组合关系(更强耦合
          也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 cxmtains-a 关系。整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。

          在这里插入图片描述

      • 泛化关系
        耦合度最大,is-a 的关系

        在这里插入图片描述

      • 实现关系

        在这里插入图片描述

设计原则

  • DIP 太重要了
    在这里插入图片描述

  • OCP
    在这里插入图片描述

  • SRP
    在这里插入图片描述

  • LSP
    在这里插入图片描述

  • ISP
    在这里插入图片描述

  • 组合优于继承
    在这里插入图片描述

  • 封装变化点
    在这里插入图片描述

    • 其实这个跟DIP原则是一致的,如果违反了这两条其中一个,另一个也满足不了(这几个原则实际上是从不同角度看代设计模式这个事情
  • 面向接口设计
    在这里插入图片描述

    • “一个产业强盛与否的标志就是是否接口标准化”

重构关建技法

在这里插入图片描述

  • 非常关键
  • 学到后面会发现是其实是从多个角度看待代码这件事。(设计原则也是,多个角度罢了

模式列表

  • 总表

在这里插入图片描述

根据目的划分

创建型模式

用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。

  • 单例
  • 原型
  • 工厂方法
  • 抽象工厂
  • 建造者

结构型模式

用于描述如何将类或对象按某种布局组成更大的结构

  • 代理
  • 适配器
  • 桥接
  • 装饰
  • 外观
  • 享元
  • 组合

行为型模式

  • 模板方法
  • 策略
  • 命令
  • 职责链、
  • 状态
  • 观察者
  • 中介者
  • 迭代器
  • 访问者
  • 备忘录
  • 解释器

根据作用范围划分

根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种

类模式

用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF中的工厂方法(类)适配器模板方法解释器属于该模式。

对象模式

用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。GoF 中除了以上 4 种,其他的都是对象模式。

从封装变化角度划分(李建忠老师)

在这里插入图片描述



系列博客目录

按照李建忠老师的分类进行学习的。说实话,李老师的课真的惊艳我,裂 墙 安 利 !
虽然之前边耐政老师(老师必须拥有姓名XD)讲得也很不错(按照GoF的进行教学),让我简单入了个门并且让我意识到了设计模式的重要性,但是由于阅历以及课程组织的原因,仍是十分懵懂。

组件协作

  • 模板、观察者、策略

单一职责

  • 装饰、桥
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值