设计模式之美重要内容

内容来自王争设计模式之美

1、设计模式

创建型模式:将创建和使用代码解耦
结构型模式:将不同功能代码解耦
行为型模式:将不同的行为代码解耦

  • 创建型:将创建和使用代码解耦
    常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式
    不常用的有:原型模式
  • 结构型:将不同功能代码解耦
    常用的有:代理模式、适配器模式、装饰者模式、桥接模式
    不常用的有:门面模式、组合模式、享元模式
  • 行为型:将不同的行为代码解耦
    常用的有:观察者模式、模板模式(回调)、策略模式、职责链模式、迭代器模式、状态模式
    不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式

2、UML

类与类之间都哪些交互关系呢,UML 统一建模语言中定义了六种类之间的关系,它们分别是:继承、实现 | 关联、依赖 | 聚合、组合

  • 继承:extends
  • 实现:implements
  • 依赖:使用关系,一个类使用另一个类作为参数使用或返回值
  • 关联:成员变量
  • 聚合:成员变量,生命周期不同,has a 的关系(课程与学生)
  • 组合:成员变量,生命周期相同,contains a 的关系(鸟与翅膀)

image

3、创建型模式

创建型模式:将创建和使用代码解耦

  • 单例:处理资源访问冲突、表示全局唯一类
  • 简单工厂、工厂方法、抽象工厂:封装对象复杂的创建过程,将对象的创建和使用分离,让代码更加清晰
  • 建造者:创建一种类型的复杂对象,通过设置不同的可选参数,"定制化" 地创建不同的对象
    创建对象的属性有很多
    配置项之间有依赖关系、约束关系
    需要创建的对象为不可变对象
  • 原型:对象的创建成本比较大(克隆)

image
image

4、结构型模式

结构型模式:将不同功能代码解耦

  • 代理:在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能
    代理可以分为静态代理和动态代理
    业务系统的非功能性需求开发
    在 RPC、缓存中的应用
    缓存中的应用
  • 桥接:将抽象和实现解耦,让它们可以独立变化
  • 装饰器:主要解决继承关系过于复杂的问题,通过组合来替代继承,它主要的作用是给原始类添加增强功能
    装饰器类和原始类继承同样的父类,这样我们可以对原始类 "嵌套" 多个装饰器类
    装饰器类是对功能的增强,这也是装饰器模式应用场景的一个重要特点
  • 适配器:一种事后的补救策略
    封装有缺陷的接口设计
    统一多个类的接口设计
    替换依赖的外部系统
    兼容老版本接口
    适配不同格式的数据
  • 门面:为子系统提供一组统一的接口,定义一组高层接口让子系统更易用
  • 组合:将一组对象组织(Compose)成树形结构,以表示一种 "部分 - 整体" 的层次结构
  • 享元:享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象

image
image
image
image
image

5、行为型模式

行为型模式:将不同的行为代码解耦

  • 观察者:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知
    被观察者依赖观察者集合,当被观察者状态改变时,被观察者需要调用观察者集合的对应方法
  • 模版:在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现
  • 回调:双向调用关系,A 调用 B,B 反过来又调用 A(同步回调看起来更像模板模式,异步回调看起来更像观察者模式)
  • 策略:定义一族算法类,将每个算法分别封装起来,让它们可以互相替换(解耦策略的定义、创建、使用)
    策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代指使用算法的代码)
  • 职责链:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求
    将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止
  • 状态:状态机有 3 个组成部分,状态(State)、事件(Event)、动作(Action)
    事件也称为转移条件(Transition Condition),事件触发状态的转移及动作的执行,不过动作不是必须的,也可能只转移状态,不执行任何动作
  • 迭代器:将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一
  • 访问者:
  • 备忘录:
  • 命令:
  • 解释器:
  • 中介:

image
image
image

6、总图

image

posted @ 2023-06-24 14:57  lidongdongdong~  阅读(141)  评论(0编辑  收藏  举报