是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战
主要有11种:
责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式
责任链模式
构建方式:
- 接收对象有不同的种类
- 对于接收对象用统一的责任链处理
- 在责任链上包含多个接收者,不同的接收者可以处理不同的接收对象
- 当前接收者无法处理当前接受当前接收对象时,传递给下一个接收者
比如可以用于不同级别的日志打印
- 调用方不需要知道接收者内部如何针对接收对象做不同处理,同时接收者内部可以解耦不同的处理逻辑
- 调用方与责任链解耦
- 接收者内部可以更加灵活对应不同的处理逻辑
命令模式
数据驱动设计模式
- 调用方将命令包裹成对象
- 需要抽象命令
- 传递给接收者
- 接收者执行命令
相比责任链模式,感觉责任链模式是执行逻辑嵌入接收者,命令模式是每个命令自带执行逻辑,接收者只是调用命令的执行函数,并且命令模式可以添加多个命令后串行执行多个命令
解释器模式
对于一些语法、表达式上的操作,可以通过类方法的方式代替直接写文本
如sql表达式可以用gorm中的一系列函数替代
迭代器模式
看到这个名字,其实就蛮熟悉的了,在python种也有迭代器的概念
- 集合对象实现迭代器集合抽象方法(getIterator)
- 使得对象可用于for range语言特性,进行遍历
- 集合对象返回的迭代器需实现迭代器抽象(hasNext、getNext)
中介者模式
- 通过一个中介者类,处理维护多个类、对象之间的通信交互
- 由类似的网络结构变成中心化结构(星型结构)
- 可以降低类与类之间的耦合
- 防止出现类似一个类代码修改,与之通信交互的其他类代码也必修改的惊群效应
- 避免出现职责、引用混乱
备忘录模式
保存对象的某个状态,调用者可以在适当的时候获取该状态
观察者模式
当多个对象状态依赖一个对象a状态的时候,a对象状态发生变化,依赖a的对象状态也会发生变化
- 观察者模式在a发生状态变化的时候,会自动通知依赖a的对象,然后进行更新
- 一般采用异步的方式通知所有被通知者
需要注意,如果被通知者也是被观察者,可能会出现循环通知的情况
- 被通知对象初始化的时候会调用attach,告诉对象a自己需要被更新
- 当a变化时,setState会调用所有attach进来的对象的update方法
状态模式
对象行为由其状态决定
- 状态也有对应抽象
将行为设置在状态内,不同的状态内部行为不一样
- 不同状态都需要实现状态抽象的行为function
状态可以一直附在上下文(contexcontext)中,持续传递
- 上下文拥有设置状态、获取状态的函数
策略模式
根据传进来的上下文context,不同条件下返回实现了算法抽象的不同算法类,从而采用不同的策略
模板模式
感觉就是抽象。。。
抽象中定义了该类的主要流程(内部方法的调用顺序等)以及内部有哪些方法(构成了刚刚的主要流程)
实现可以按需实现内部方法,从而使得经过主要流程后可到达不同目的
访问者模式
元素集合类内部包含了很多元素(底层有元素抽象)
- 元素集合类在初始化的时候需要一个访问者类
- 不同的访问这类针对元素的处理方式不一样
- 可以根据需要灵活地实现访问者类来改变元素的执行算法‘
- 访问者类依赖元素类的抽象方法