设计模式学习手册

设计模式学习手册

第一章 设计模式概述

1. 什么是设计模式

  • 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了让代码更具有复用性和更容易被他人理解且保证代码可靠性

2. 为什么要学习设计模式

  • 读懂源码:JDK、Spring、SpringMVC、IO等源码
  • 读懂具体项目代码:提升项目接手难度
  • 为了编写优雅的代码

3. 设计模式分类

在这里插入图片描述

  • 创建型模式(五种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
  • 结构性模式(七种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
  • 行为型模式(十一种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

4. 设计模式六大原则

在这里插入图片描述

开放封闭原则(Open Close Principle)

  • 思想:对扩展开发,对修改封闭。尽量通过扩展软件实体来解决需求变化,而不是通过修改已有的代码来完成变化
  • 优点:类职责单一

里式替换原则(Liskov Substitution Principle)

  • 思想:可以使用子类替换基类
  • 优点:增加程序健壮性

依赖倒转原则(Dependence Inversion Principle)

  • 思想:面向接口编程
  • 优点:依赖抽象而不依赖具体

接口隔离原则(Interface Segregation Principle)

  • 思想:接口功能单一,降低类之间耦合
  • 优点:

迪米特法则(最少知道原则)(Demeter Principle)

  • 思想:一个类应当对其他类尽可能少的了解
  • 优点:高内聚、低耦合

单一职责原则(Princple of single responsibility)

  • 思想:一个类/方法只负责一件事
  • 优点:降低类之间耦合,提高可读性,增加可维护性和可拓展性

第二章 分解设计模式

1. 单例模式

什么是单例

  • 保证一个类只有一个实例,并且提高一个访问的全局访问点

单例模式应用场景

  • 线程池
  • spring模式bean
  • windows的任务管理器

优点

  • 针对特殊场景,提高系统性能
  • 检查资源占用

缺点

  • 有状态

注意事项

  • 防止反射破坏单例模式
  • 懒汉式&饿汉式优缺点

创建方式

  • 饿汉式:资源占用
  • 懒汉式:懒加载,线程安全问题
  • 静态内部类:懒加载
  • 枚举:资源占用,推荐
  • DCL:推荐

2. 工厂模式

简述

  • 通过对象工厂创建对象,实现创建者和调用者分离(简单工厂、工厂方法、抽象工厂)

好处

  • 通过工厂类来同一管理对象的创建
  • 降低类之间耦合

应用场景

  • Spring IoC容器

工厂模式分类

  • 简单工厂:用来生产同一等级结构中的任意产品(单一工厂)
  • 工厂方法:用来生产同一等级结构中的固定产品(细化工厂)
  • 抽象工厂:用来生产不同产品族的全部产品(成套生产)

3. 代理模式

简述

  • 通过代理控制对象的访问,如AOP
  • 不修改原代码业务逻辑的情况下,接入新功能

应用场景

  • Spring AOP
  • 日志打印
  • 异常处理
  • 事务控制
  • 权限控制

代理分类

  • 静态代理:需要类之间存在继承关系(代理类和目标类),每个类的代理都要自己实现
  • JDK动态代理:不需要向静态代理那样重复编写代理代码
  • Cglib、javaassist 字节码操作库:修改字节码生成子类

4. 建造者

简述

  • 将复杂对象的构建和类分离

应用场景

  • 需要生产复杂对象
  • StringBuilder

5. 模板方法

简述

  • 一定一个操作的算法骨架(父类),将具体实现延迟到子类

应用场景

  • Spring Boot 的template类

6. 外观模式

简述

  • 也叫门面模式,隐藏系统内部结构,向外提供公共接口

7. 原型模式

简述

  • 复制已经存在的实例(高效)

应用场景

  • Spring Bean 原型

具体实现

  • 实现 Cloneable接口,重写 clone方法

浅拷贝&深拷贝

  • 浅拷贝:只拷贝基本类型数据,对于引用类型数据,只是拷贝了一份引用地址
  • 深拷贝:基于浅拷贝,增加引用类型数据拷贝

8. 策略模式

简述

  • 根据不同的业务状态来使用对应的逻辑策略

应用场景

  • 如不同级别会议不同打折力度(初级会员、中级会员、高级会员)

优缺点

  • 优点:逻辑清晰,避免多重条件判断,扩展性好
  • 缺点:增加类

9. 观察者

简述

  • 又叫 发布-订阅模式。实现类之间的监控

实现方式

  • push:每次被监听的对象发生变化后,通知所有的观察者
  • pull:观察者可以异步接收被监听者的变化

应用场景

  • mq
  • redis 发布-订阅

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×