11种行为型设计模式横向对比
行为型设计模式主要作用是将一个复杂的业务流程分解成多个类或对象协作完成。
序号 | 模式名称 | 构成要素 | 作用 |
---|---|---|---|
1 | 模板方法模式 | 1、抽象模板类 (包含抽象方法,具体方法,钩子方法,并在模板方法中调用抽象方法,具体方法,钩子方法) 2、具体子类 (实现抽象模板中的抽象方法和钩子方法) |
分离算法骨架和特定操作步骤 |
2 | 策略模式 | 1、策略类 (提供对应的业务逻辑方法) 2、环境类 (在构造函数中初始化策略类,提setStrategy方法更改策略,提供业务方法,调用策略类的业务方法) |
分离算法的使用者和实现者 |
3 | 命令模式 | 1、命令类 (在构造函数中获取实现者,提供execute方法,调用实现者的action方法) 2、实现者 (提供action方法,处理业务逻辑) 3、调用者 (在构造函数中设置命令类,提供setCommand方法设置命令,提供 call 方法,执行命令类的 execute 方法) |
分离业务的实现者和调用者 |
4 | 责任链模式 | 1、抽象处理类 (提供设置 setNext 和获取 getNext 下一个具体处理类的方法) 2、具体处理类 (提供处理请求的方法,根据业务参数判断能否处理请求,不能就将请求转入下一个处理者) 3、客户类 (实例化具体处理者,通过setNext 依次串联每个具体处理者,调用第一个处理者的请求方法) |
分离请求发送者与请求的处理者 |
5 | 状态模式 | 1、环境类 (在构造函数中初始化当前状态,提供设置和获取当前状态的方法,提供当前状态的业务逻辑方法) 2、抽象状态类 (提供一个方法,封装环境对象中特点状态所对应的行为,供环境类调用) 3、具体状态类 (实现抽象状态所对应的行为,根据不同的状态做出不同的反应) |
把复杂的判断逻辑提到不同的状态对象中,从而分离状态对象 |
6 | 观察者模式 | 1、目标对象 (在构造函数中定义 list 容器。提供添加、删除观察者对象的方法,提change方法(调用观察者对象的response)) 2、观察者对象 (提供response方法,根据不同的状态变化做出不同的反应。) |
分离目标与观察者之间的关系,当一个状态发生变化时,所有的观察者对象自动更新 |
7 | 中介者模式 | 1、同事对象 (再抽象类中定义setMedium方法,在子类中提供接收和发送方法(发送方法中调用中介者的转发方法)) 2、中介者对象 (提供注册(调用 setMedium方法)和转发方法) |
降低对象耦合度,将对象之间一对多的关系转变为一对一的关系 |
8 | 迭代器模式 | 1、聚合元素 (在构造函数中定义 list 容器,提供添加、删除对象的方法,提供获取迭代器元素的方法。) 2、迭代器元素 (提供判断是否有下一个元素的方法、提供访问第一个元素、最后一个元素的方法,提供访问上一个元素、下一个元素的方法。) |
分离聚合对象和遍历行为 |
9 | 访问者模式 | 1、访问者 (提供 visit 访问方法,根据不同的元素做出不同的反应) 2、元素 (提供 accept 接收访问者方法,通常在内部调用visit,提供getName返回元素的方法) 3、对象结构 (在构造函数中定义 list 用来管理元素,可以添加、删除、遍历元素调用元素的 accept 方法) |
数据的操作(访问者)和数据元素、数据结构进行分离 |
10 | 备忘录模式 | 1、发起人 (提供set和get方法获取和设置当前状态。提供create方法创建备忘录,提供restore方法恢复备忘录); 2、备忘录 (提供set和get方法获取和设置状态); 3、管理者 (在构造函数中定义 list 用来存储状态。提供 add 方法储存备忘录,提供pop方法恢复备忘录); |
发起人、备忘录、管理者进行分离 |
11 | 解释器模式 | 1、终结符表达式 (在构造函数中定义set容器储存匹配字段。提供interpret方法判断是否在匹配字符中); 2、非终结符表达式 (在构造函数中定义传入字段。提供interpret方法判断传入字段是否在匹配字符中)。 3、环境 (在构造函数中定义匹配字段参数,实例化终结符表达式,实例化非终结符表达式,提供业务方法action根据是否匹配做出反应) |
终结符与非终结符进行分离 |